(二)TCPSocket 客户端编写 —— 一个服务端对应多个客户端(超详细)
前文链接:(一)TCPSocket 服务端编写 —— 一个服务端对应多个客户端(超详细)文章目录客户端的一些API客户端源码(超详细)效果终极演示客户端的一些APIsocket:创建套接字connect:与服务端建立连接send/recv:发送数据 / 接收数据close:关闭套按字客户端编写顺序与上面函数顺序一样客户端源码(超详细)每行代码都加以详细的注...
·
前文链接:
(一)TCPSocket 服务端编写 —— 一个服务端对应多个客户端(超详细)
文章目录
客户端的一些API
- socket:创建套接字
- connect:与服务端建立连接
- send/recv:发送数据 / 接收数据
- close:关闭套按字
客户端编写顺序与上面函数顺序一样
客户端源码(超详细)
每行代码都加以详细的注释(看不懂你来砍我)~
#pragma comment(lib, "ws2_32.lib") // 网络编程需要的链接库
#include <WinSock2.h>
#include <stdio.h>
#include <stdlib.h>
void main()
{
WSADATA wsaData; // 用于初始启动信息
SOCKET s; // 客户端的套接字
SOCKADDR_IN ServerAddr; // 服务端地址
int Port = 5150; // 服务端端口号
int Ret; // 用于判断
char buf[1024]; // 用来发送数据
// 开始启动信息,2.2版本
if((Ret = WSAStartup(MAKEWORD(2, 2), &wsaData)) != 0)
{
printf("WSAStartup failed with error %d\n", Ret);
return;
}
// 创建套接字,并判断是否成功
if((s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == INVALID_SOCKET)
{
printf("socket failed with error %d\n"), WSAGetLastError());
WSACleanup();
return;
}
// 初始化服务端地址信息
ServerAddr.sin_family = AF_INET; // 使用ip4
ServerAddr.sin_port = htons(Port); // 字节转型,前文有介绍
// 因为没有其它电脑,也没有安装虚拟机,所有只有使用本机的ip地址
ServerAddr.sin_addr.S_un.S_ddr = inet_addr("172.0.0.1"); // 将本机ip转为32位无符号整形
// 提示信息
printf("We are trying to connect to %s:%d...\n", inet_ntoa(ServerAddr.sin_addr), htons(ServerAddr.sin_port));
// 建立链接(链接服务端),并判断是否成功
if(connect(s, (SOCKADDR*)&ServerAddr, sizeof(ServerAddr)) == SOCKET_ERROR)
{
printf("connect failed with error %d\n", WSAGetLastError());
closesocket(s); // 释放套接字
WSACleanup(); // 清空启动信息
return;
}
// 链接成功提示信息
printf("Our connection succeeded.\n");
printf("We will with hello send.\n");
while(1) // 可以一直发信息
{
printf("The data you send is:\n");
scanf("%s", buf); // 输入需要发送的数据
// 发送数据,并判断是否失败,返回的是发送了多少数据
if((Ret = send(s, buf, strlen(buf), 0)) == SOCKET_ERROR)
{
printf("send failed with error %d\n", WSAGetLastError());
closesocket(s);
WSACleanup();
return;
}
// 提示发送了多少数据
printf("We successfully sent %d bytes.\n\n", Ret);
}
printf("We are closing the connection.\n");
closesocket(s);
WSACleanup();
system("pause");
}
效果终极演示
先将服务端开启,然后再运行客户端
作者:浪子花梦
Time:2020.02.15
学海无涯苦作舟,加油!
更多推荐
已为社区贡献2条内容
所有评论(0)