ipv6实现tcp编程示例

 更新时间:2014年03月30日 09:34:25   作者:  
这篇文章主要介绍了ipv6实现tcp编程示例,需要的朋友可以参考下

开发测试环境:WIN7SP、 VS2005

TcpServer.cpp

复制代码 代码如下:

#include <iostream>
#include <WinSock2.h>
#include <ws2tcpip.h>

#pragma comment(lib, "ws2_32.lib")

int main(int argc, char** argv)
{
 using namespace std;

 cout<<"Server Start..."<<endl;

 WORD wVersion = 0;
 WSADATA wsaData;
 memset(&wsaData, 0, sizeof(wsaData));
 wVersion = MAKEWORD(2, 2);

 if (0 != WSAStartup(wVersion, &wsaData))
 {
  return -1;
 }

 if (2 != LOBYTE(wsaData.wVersion) || 2 != HIBYTE(wsaData.wVersion))
 {
  WSACleanup();
  return -1;
 }

 struct addrinfo hints;
 struct addrinfo* res = NULL;
 memset(&hints, 0, sizeof(hints));
 hints.ai_family = AF_UNSPEC;
 hints.ai_socktype = SOCK_STREAM;
 hints.ai_protocol = IPPROTO_TCP;
 hints.ai_flags = AI_PASSIVE;

 if (0 != getaddrinfo(NULL, "6677", &hints, &res))
 {
  WSACleanup();
  return -1;
 }

 SOCKET sk = socket(res->ai_family, res->ai_socktype, res->ai_protocol);

 bind(sk, res->ai_addr, res->ai_addrlen);

 if (0 != listen(sk, 5))
 {
  WSACleanup();
  closesocket(sk);
  return -1;
 }

 struct sockaddr_storage storage;
 int len = sizeof(storage);
 memset(&storage, 0, len);

 SOCKET newSk = accept(sk, (struct sockaddr*)&storage, &len);
 closesocket(sk);

 char recvBuf[1024] = {'\0'};
 int lenRecv = 0;
 lenRecv = recv(newSk, recvBuf, 1024, 0);
 cout<<"Recv From Client:"<<recvBuf<<" Len:"<<lenRecv<<endl;
 send(newSk, recvBuf, lenRecv, 0);

 WSACleanup();
 closesocket(newSk);

 return 0;
}

TcpClient.cpp

复制代码 代码如下:

#include <iostream>
#include <WinSock2.h>
#include <ws2tcpip.h>

#pragma comment(lib, "ws2_32.lib")

int main(int argc, char** argv)
{
 using namespace std;

 cout<<"Client Start..."<<endl;

 WORD wVersion = 0;
 WSADATA wsaData;
 memset(&wsaData, 0, sizeof(wsaData));
 wVersion = MAKEWORD(2, 2);

 if (0 != WSAStartup(wVersion, &wsaData))
 {
  return -1;
 }

 if (2 != LOBYTE(wsaData.wVersion) || 2 != HIBYTE(wsaData.wVersion))
 {
  WSACleanup();
  return -1;
 }

 struct addrinfo hints;
 struct addrinfo* res = NULL;
 memset(&hints, 0, sizeof(hints));
 hints.ai_family = AF_UNSPEC;
 hints.ai_socktype = SOCK_STREAM;
 hints.ai_protocol = IPPROTO_TCP;
 hints.ai_flags = AI_CANONNAME;

 if (0 != getaddrinfo("123.123.123.19", "6677", &hints, &res))
 {
  WSACleanup();
  return -1;
 }

 SOCKET sk = socket(res->ai_family, res->ai_socktype, res->ai_protocol);

 if (0 != connect(sk, res->ai_addr, res->ai_addrlen))
 {
  WSACleanup();
  closesocket(sk);
  return -1;
 }

 char sendBuf[1024] = {"abcdef"};
 char recvBuf[1024] = {'\0'};
 int lenRecv = 0;

 send(sk, sendBuf, strlen(sendBuf), 0);
 lenRecv = recv(sk, recvBuf, 1024, 0);
 cout<<"Recv From Server:"<<recvBuf<<" Len:"<<lenRecv<<endl;
 

 WSACleanup();
 closesocket(sk);

 return 0;
}

相关文章

  • 基于C语言实现学生选课系统

    基于C语言实现学生选课系统

    这篇文章主要为大家详细介绍了基于C语言实现学生选课系统,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-02-02
  • C++嵌入式内存管理详情

    C++嵌入式内存管理详情

    这篇文章主要介绍了C++嵌入式内存管理,是对上一篇内存的一个补充,主要讲解Linux中的内存;这部分对于一些端侧部署的伙伴来说比较重要,推荐针对不同的板子,下面来看看详细内容吧,需要的朋友可以参考一下
    2021-12-12
  • C语言实现实验设备管理系统

    C语言实现实验设备管理系统

    这篇文章主要为大家详细介绍了C语言实现实验设备管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-06-06
  • 一文详解C++中的mutable关键字

    一文详解C++中的mutable关键字

    在C++中mutable关键字正如字面意思所示,表示「可变的」之意,一般在以下两种情况中使用较多,一是修饰类中的变量,用来突破const的限制,二是在Lambda表达式中使用,用来捕获修改表达式之外的变量值,下面我们就针对这两种使用场景逐个介绍
    2023-10-10
  • C++ 详细讲解对象的构造顺序

    C++ 详细讲解对象的构造顺序

    对象的构造往往和构造函数会牵扯在一起,构造函数的函数可能会由非常复杂的逻辑所组成,不同类的构造函数的程序逻辑很可能是相互依赖的,当这种相互依赖一旦成立,那么对象的构造顺序很可能导致难以调试的Bug出现
    2022-04-04
  • C++实现图书管理系统课程设计(面向对象)

    C++实现图书管理系统课程设计(面向对象)

    这篇文章主要为大家详细介绍了C++实现图书管理系统课程设计,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • C语言在输入输出时遇到的常见问题总结

    C语言在输入输出时遇到的常见问题总结

    大家在平时的做题中是否会遇到和我一样的烦恼,题目的代码已经基本完成,但是在输出时候,总是和题目给出的样例输出格式不同 ,导致题目不能通过。为了解决这一烦恼,我总结了以下几点,需要的可以参考一下
    2022-09-09
  • MFC实现连连看游戏之地图显示

    MFC实现连连看游戏之地图显示

    这篇文章主要为大家详细介绍了MFC实现连连看游戏之地图显示,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-01-01
  • C++常见异常处理原理及代码示例解析

    C++常见异常处理原理及代码示例解析

    这篇文章主要介绍了C++常见异常处理原理及代码示例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • 详解C语言中结构体的使用

    详解C语言中结构体的使用

    结构体是一些值的集合,这些值称为成员变量,结构体的每个成员可以是不同类型的变量。本文将通过示例为大家详细讲讲C语言中结构体的使用,需要的可以参考一下
    2022-07-07

最新评论