说明:之前在CSDN上找TCP编程时,发现有各种版本。不同版本之间写法不一,所以自己写了个C语言版本的,记录下来。
服务端代码:
#define _WINSOCK_DEPRECATED_NO_WARNINGS
#pragma comment(lib, "Ws2_32.lib")
#include<stdio.h>
#include<WinSock2.h>
#include<ws2tcpip.h>
int main(int argc, char* argv[]) {
printf("This is server:\n");
WSADATA wsaData;
int ret = WSAStartup(MAKEWORD(2, 2), &wsaData);
if (ret != 0) { printf("ret报错 %d\n", ret); }
SOCKET sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
SOCKADDR_IN serverAddr;
serverAddr.sin_family = AF_INET;
serverAddr.sin_addr.s_addr = inet_addr("127.0.0.1");
serverAddr.sin_port = htons(1324);
int ret2 = bind(sock, (SOCKADDR*)&serverAddr, sizeof(serverAddr));
if (ret2 != 0) { printf("ret2报错 %d\n", ret2); }
int ret3 = listen(sock, 20);
if (ret3 != 0) { printf("ret3报错 %d\n", ret3); }
while (1)
{
SOCKADDR cAddr;
int nSize = sizeof(SOCKADDR);
SOCKET accSock = accept(sock, (SOCKADDR*)&cAddr, &nSize);
char buf[1024] = { 0 };
int ret4 = recv(accSock, buf, 1024, 0);
if (ret4 > 0) { printf("接受到消息:%s\n", buf); }
if (ret4 <= 0) { printf("ret4报错 %d\n", ret4); }
char* str = "This is server,Hello client!";
int ret5 = send(accSock, str, strlen(str), 0);
if (ret5 <= 0) { printf("ret5 %d\n", ret5); }
if (ret5 >0) { printf("server发送成功!发送的字节数为 %d\n", ret5); }
}
closesocket(sock);
WSACleanup();
return 0;
}
客户端代码:
#define _WINSOCK_DEPRECATED_NO_WARNINGS
#pragma comment(lib, "Ws2_32.lib")
#include<stdio.h>
#include<WinSock2.h>
#include <WS2tcpip.h>
int main(int argc,char* argv[]) {
printf("This is client:\n");
WSADATA wsaData;
WSAStartup(MAKEWORD(2, 2), &wsaData);
SOCKET sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
struct sockaddr_in sockAddr;
sockAddr.sin_family = AF_INET;
sockAddr.sin_addr.s_addr = inet_addr("127.0.0.1");
sockAddr.sin_port = htons(1324);
if (connect(sock, (SOCKADDR*)&sockAddr, sizeof(SOCKADDR)) != -1)
{
int ret = send(sock, "This is client, hello server!", strlen("This is client, hello server!"), 0);
if (ret > 0) { printf("client发送成功!发送的字节数为:%d\n",ret); }
if (ret < 0) { printf("client发送失败!ret %d\n",ret); }
char buffer[1024] = { 0 };
if (recv(sock, buffer, 1024, 0) > 0) {
printf("接受到消息: %s\n", buffer);
}
}
closesocket(sock);
WSACleanup();
getchar();
return 0;
}
运行结果:
![在这里插入图片描述](https://img-blog.csdnimg.cn/a793f9a0a6754b72960a8c79d30240af.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6L-O6aOO5b6u56yR55qE5Luj56CB5LuU,size_20,color_FFFFFF,t_70,g_se,x_16)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)