码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2019-06-16 21:57:45      阅读:134      评论:0      收藏:0      [点我收藏+]

标签:服务器端   ||   size   src   version   建立连接   png   初始   关闭   

一、客户端操作流程

  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)

标签:服务器端   ||   size   src   version   建立连接   png   初始   关闭   

原文地址:https://www.cnblogs.com/506941763lcj/p/11032808.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!