socket编程——客户端实例(TCP)

Posted 506941763lcj

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了socket编程——客户端实例(TCP)相关的知识,希望对你有一定的参考价值。

一、客户端操作流程

  1.1 加载套接字库(WSAStartup())

  1.2创建套接字(socket())。

  1.3向服务器发出连接请求(connect())。

  对于客户端来说,它不需要绑定,可以直接连接服务器。这可以通过调用connect函数与服务器建立一个连接。其函数原型如下:

int connect(SOCKET s, const struct Sockaddr FAR* name , int namelen);

参数:

a) s:客户端用于首发数据的套接字。

b) name:指定网路主机的IP地址和端口信息。

c) namelen:第二个参数的长度。

想要与服务器建立连接,首先需要定义一个地址结构体(SOCKADDR_IN)变量,并对其成员进行赋值,设定服务端的IP地址和端口号,这里的端口需要与服务器使用的端口保存一致,而且使用网路字节顺序。

1.4 和服务器端进行通信(接受和发送信息(send()/recv()))

1.5 关闭套接字 (closesocket()/WSACleanup())

二、客户端实例

 1 #include<winsock2.h>
 2 #include<iostream>
 3 using namespace std;
 4 int main()
 5 
 6     WORD wVersion;
 7     WSADATA wsaData;
 8     int er;
 9     //1.初始化版本
10     wVersion = MAKEWORD(1,1);
11     //加载套接字库
12     er = WSAStartup(wVersion,&wsaData);
13     if (er!=0)
14     
15         return -1;
16     
17     //检测套接字
18     if (LOBYTE(wsaData.wVersion)!=1||HIBYTE(wsaData.wVersion)!=1)
19     
20         return -2;
21     
22 
23     //2.创建套接字
24     SOCKET sock = socket(AF_INET,SOCK_STREAM,0);
25     //3.连接服务器
26     SOCKADDR_IN addr_in;
27     addr_in.sin_family = AF_INET;
28     addr_in.sin_port = htons(7000);
29     addr_in.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
30     connect(sock,(sockaddr*)&addr_in,sizeof(addr_in));
31     //4.发送或者接受数据
32     char recvBuf[1024];
33     recv(sock,recvBuf,strlen(recvBuf)+1,0);
34     cout << "接受到服务器数据:" << endl;
35     char sendBuf[]="window socket 程序测试";
36     send(sock,sendBuf,sizeof(sendBuf),0);
37     //5.关闭套接字
38     closesocket(sock);
39     WSACleanup();
40     system("pause");
41     return 0;
42 

三、TCP/IP工作原理图

技术图片

 

以上是关于socket编程——客户端实例(TCP)的主要内容,如果未能解决你的问题,请参考以下文章

TCP/UDP套接字 java socket编程实例

linux socket编程系统调用栈

Socket编程

Linux:TCP Socket编程(代码实战)

Linux:TCP Socket编程(代码实战)

Python 之 Socket编程(TCP/UDP)