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 );



版权声明:不积跬步无以至千里,愿与君共勉! https://blog.csdn.net/Crazy_Tengt/article/details/79196149

web多应用下跨域通信

本课程用于介绍多应用、跨域情形下的网络请求技术
  • 2016年04月18日 16:59

C++的TCP/UDP通信实现

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

C++_Winsock服务器客户端通讯编程

c+<em>c%2B%2B</em>程序员面试宝典 时间:2018-4-9 基于winsock的简单<em>TCP</em>通讯 时间:2018-4-9 C++实现简单Socket<em>通信</em> 时间:2018-4-9C++ socket编程 实现服务端与客户端...
  • 2018年04月17日 00:00

c++面试题(网络通信篇)

●TCP和UDP的区别 UDP 与 TCP 的主要区别在于 UDP 不一定提供可靠的数据传输,它不能保证数据准确无误地到达,不过UDP在许多方面非常有效。当程序是要尽快地传输尽可能多的信息时,可以使用...
  • zhouchunyue
  • zhouchunyue
  • 2018-02-06 16:24:25
  • 299

C++实现简单Socket<em>通信</em>

C语言实现socket<em>通信</em> 时间:2018-4-14 <em>C%2B%2B</em> 达内科技 c++ 课件 及 源码 ...跨平台socket网络<em>通信c</em>语言实现 时间:2018-4-9C++基于<em>TCP</em>和UDP的socket<em>通信</em> Java...
  • 2018年04月17日 00:00

winsock实现TCP通信Demo

Client #define _WINSOCK_DEPRECATED_NO_WARNINGS #include #include #include // 包含网络通信头文件 #prag...
  • u011726005
  • u011726005
  • 2017-08-08 22:07:31
  • 55

C++模拟<em>TCP</em>协议工作过程

利用用C语言,实现<em>TCP</em>协议工作过程。用开发语言<em>中的</em>数据类型实现<em>TCP</em>协议涉及到的...C++实现简单Socket<em>通信</em> 时间:2018-4-17 <em>C%2B%2B</em> 达内科技 c++ 课件 及 源码...
  • 2018年04月19日 00:00

linux c++ socket入门之tcp client端 .

http://blog.csdn.net/jom_ch/article/details/7956380 main.cpp [cpp] view plaincopy #in...
  • wangjingyu00711
  • wangjingyu00711
  • 2014-12-19 22:27:28
  • 444

ModBus/TCP协议分析

ModBus/TCP协议分析 一、术语 1 word = 2 byte; 1 byte = 8 bit. 校验码:校验码是由前面的数据通过某种算法得出的,用以检验该组数据的正确性。代码作为数据在向计算...
  • kevin_bobolkevin
  • kevin_bobolkevin
  • 2016-12-22 11:24:31
  • 9912

ROS service入门到应用

ROS Service 入门到应用使用ros有一段时间了,但是一般topic类型的通信方式使用的最多,很少使用service,所以对service也就是简单的了解,并没有真正的使用过,最近要用到ser...
  • Start_From_Scratch
  • Start_From_Scratch
  • 2017-03-06 00:38:05
  • 1068
收藏助手
不良信息举报
您举报文章:C++ TCP通信
举报原因:
原因补充:

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