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

C++的TCP/UDP通信实现

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

C++中的TCP通信

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

linux下C++实现TCP通信

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

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

 http://blog.csdn.net/guoguojune/archive/2011/02/15/6185301.aspx(原文的格式看着真叫一个舒服) 开发...
  • u011555996
  • u011555996
  • 2017-04-21 17:09:10
  • 729

C++ 简单封装socket类包含TCP和UDP基本通信能力

文件包含:TSocket.cpp、TSocket.h 使用方法: 1、在对话框头文件包含TSocket.h #include "TSocket.h"   2、定义变量 ...
  • yfhy2014
  • yfhy2014
  • 2015-03-11 18:29:35
  • 1448

C++实现TCP通信。。

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

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

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

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

开发环境 Vs 2008 新建一个 win32 console project,在这个环境下,创建TCP/IP简单应用...
  • guoguojune
  • guoguojune
  • 2011-02-15 09:51:00
  • 13660

JAVA与C++进行TCP通信 包括断线重连

C++与Java通讯涉及到大小端转换 和字符集转换的问题本程序调用了Okio进行通信package com.aast.test; import com.aast.model.Massage; impo...
  • douzi949389
  • douzi949389
  • 2018-02-05 22:00:49
  • 77

用动态库封装了TCP通信,可以实现文件的传输

  • 2013年04月21日 21:51
  • 207KB
  • 下载
收藏助手
不良信息举报
您举报文章:C++ TCP通信
举报原因:
原因补充:

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