C++ TCP通信

原创 2018年01月29日 15:42:52
TCP通信过程:

UDP通信过程:

WSAStartup()
此函数在应用程序中初始化Windows Sockets DLL ,只有此函数调用成功后,应用程序才可以再调用其他Windows Sockets DLL中的API函数。在程式中调用该函数的形式如下:

WSAStartup((WORD)((1<<8|1), (LPWSADATA)&WSAData),

其中(1<<8|1)表示我们用的是WinSocket1.1版本,WSAata用来存 储系统传回的关于WinSocket的资料。

Socket()
初始化WinSock的动态连接库后,需要在服务器端建立一个监听的Socket,为此可以调用Socket()函数用来建立这个监听的Socket,并定义此Socket所使用的通信协议。此函数调用成功返回Socket对象,失败则返回INVALID_SOCKET(调用WSAGetLastError()可得知原因,所有WinSocket 的API函数都可以使用这个函数来获取失败的原因)。
  SOCKET PASCAL FAR socket( int af, int type, int protocol )
  参数: af:目前只提供 PF_INET(AF_INET);
     type:Socket 的类型 (SOCK_STREAM、SOCK_DGRAM);
     protocol:通讯协定(如果使用者不指定则设为0);
  如果要建立的是遵从TCP/IP协议的socket,第二个参数type应为SOCK_STREAM,如为UDP(数据报)的socket,应为SOCK_DGRAM。

bind()
接下来要为服务器端定义的这个监听的Socket指定一个地址及端口(Port),这样客户端才知道待会要连接哪一个地址的哪个端口,为此我们要调用bind()函数,该函数调用成功返回0,否则返回SOCKET_ERROR。

  int PASCAL FAR bind( SOCKET s, const struct sockaddr FAR *name,int namelen );

  参 数:
s:Socket对象名;
  name:Socket的地址值,这个地址必须是执行这个程式所在机器的IP地址;
  namelen:name的长度;
   如果使用者不在意地址或端口的值,那么可以设定地址为INADDR_ANY,及Port为0,Windows Sockets 会自动将其设定适当之地址及Port (1024 到 5000之间的值)。此后可以调用getsockname()函数来获知其被设定的值。

listen()
当服务器端的Socket对象绑定完成之后,服务器端必须建立一个监听的队列来接收客户端的连接请求。listen()函数使服务器端的Socket 进入监听状态,并设定可以建立的最大连接数(目前最大值限制为 5, 最小值为1)。该函数调用成功返回0,否则返回SOCKET_ERROR。

  int PASCAL FAR listen( SOCKET s, int backlog );

  参 数: s:需要建立监听的Socket;
      backlog:最大连接个数;

accept()
当Client提出连接请求时,Server 端hwnd视窗会收到Winsock Stack送来我们自定义的一个消息,这时,我们可以分析lParam,然后调用相关的函数来处理此事件。为了使服务器端接受客户端的连接请求,就要使用 accept() 函数,该函数新建一Socket与客户端的Socket相通,原先监听之Socket继续进入监听状态,等待他人的连接要求。该函数调用成功返回一个新产 生的Socket对象,否则返回INVALID_SOCKET。

  SOCKET PASCAL FAR accept( SCOKET s, struct sockaddr FAR *addr,int FAR *addrlen );

  参数:s:Socket的识别码;
     addr:存放来连接的客户端的地址;
     addrlen:addr的长度

closesocket()
结束服务器和客户端的通信连接是很简单的,这一过程可以由服务器或客户机的任一端启动,只要调用closesocket()就可以了,而要关闭 Server端监听状态的socket,同样也是利用此函数。另外,与程序启动时调用WSAStartup()憨数相对应,程式结束前,需要调用 WSACleanup() 来通知Winsock Dll释放Socket所占用的资源。这两个函数都是调用成功返回0,否则返回SOCKET_ERROR。

  int PASCAL FAR closesocket( SOCKET s );

  参数:s:Socket 的识别码;
  int PASCAL FAR WSACleanup( void );



版权声明:本文为 tengteng 三十分用心 原创的文章, 非商用 自由转载-保持署名-注明出处,谢谢哈 ! *@ο@*

C++中的TCP通信

TCP通信服务端和客户端代码是不同的。首先,服务端有一个ServerSocket,初始化以后(包括设置IP和端口,绑定监听等过程),这些都设置好以后,就可以使用accept()方法等待客户端连接了,这...
  • zahngjialiang
  • zahngjialiang
  • 2016年12月29日 16:17
  • 2398

C++简单的TCP/IP通信

参考之前的经验找到了代码。但是存在一定的问题在使用的时候。 原链接如下:点击打开链接 直接拷贝过去使用的时候: 1)自己的IP地址要设置为静态IP; 2)这句话...
  • mysunday2
  • mysunday2
  • 2016年09月02日 17:43
  • 344

C++实现TCP通信。。

(一) 服务器端: (1) #include #include #include using namespace std; int main(int argc, char* argv[]) ...
  • u010470972
  • u010470972
  • 2014年06月24日 22:39
  • 2512

linux下C++实现TCP通信

UDP教程可以查看:http://blog.csdn.net/weixin_37895339/article/details/72780080 TCP通信协议连结过程如下图所示。 由上图可看出...
  • weixin_37895339
  • weixin_37895339
  • 2017年05月30日 15:48
  • 800

C++的TCP/UDP通信实现

最近要做一个用于监控和显示自动测试柜运行状况的监控中心的项目,就需要从测试柜获取运行状况的信息,处理后显示在一台服务器上。由于以前跟着教我C++的老师做一个基于六维力传感器的工业机械臂牵引示教系统的时...
  • jirryzhang
  • jirryzhang
  • 2016年12月10日 23:20
  • 1640

java 客户端与c++服务器端tcp通信 demo

java 客户端代码 创建socket 绑定  import java.io.BufferedReader; import java.io.IOException; import java....
  • linxinyuluo
  • linxinyuluo
  • 2012年07月23日 22:31
  • 4749

C++ 基于TCP通讯的即时通信服务器DEMO

#include #include #pragma comment( lib, "ws2_32.lib" ) //静态链接库 int main() { WORD wVersionRe...
  • dong_18383219470
  • dong_18383219470
  • 2016年09月10日 09:24
  • 268

PHP与C++通信,发送整型数据。

function MyFunc($userid, $guid) {  //固定包头  //包ID = (1053)D = (041D)H  //加密码 = 0  //包Len = 8  $...
  • robotcat123
  • robotcat123
  • 2012年06月05日 15:43
  • 3588

TCP通信中对消息进行加密(一)

在网络通信中有时要对信息进行加密 ,可以直接用微软自带的CryptoAPI。加密方法大概可分为两种: 一 公钥加密技术:    加密和解密使用不同的密钥,分为公钥和私钥,私钥是不能让别人看见的,而...
  • XIAIBIANCHENG
  • XIAIBIANCHENG
  • 2013年03月31日 20:04
  • 2270

C++ 简单的 Tcp 实现[socket] 服务器端与客户端通信

 http://blog.csdn.net/guoguojune/archive/2011/02/15/6185301.aspx(原文的格式看着真叫一个舒服) 开发...
  • u011555996
  • u011555996
  • 2017年04月21日 17:09
  • 631
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++ TCP通信
举报原因:
原因补充:

(最多只允许输入30个字)