基础知识:
代码:
服务器:
#include<stdio.h>
#include<windows.h>
#pragma comment(lib,"ws2_32.lib")
SOCKADDR_IN cAddr={0};
int len=sizeof cAddr;
SOCKET clientSocket;
int main(){
//1.请求版本号
WSADATA wsaData;
WSAStartup(MAKEWORD(2,2),&wsaData);
if(LOBYTE(wsaData.wVersion)!=2||HIBYTE(wsaData.wVersion)!=2){
printf("连接失败\n");
return -1;
}
printf("请求协议成功\n");
//2.创建socket
SOCKET severSocket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);//通信协议类型,通信用的数据类型,保护方式
if(severSocket==-1){
printf("创建socket失败\n");
WSACleanup();
return -2;}
printf("创建socket成功\n");
//3.创建协议地址族
SOCKADDR_IN addr={0};
addr.sin_family=AF_INET;//协议版本
addr.sin_addr.S_un.S_addr=inet_addr("192.168.43.140");//用自己的
addr.sin_port=htons(10086);//用10000左右,小的端口被系统用到
//4.绑定
int r=bind(severSocket,(sockaddr*)&addr,sizeof addr);
if(r==-1){
printf("bind失败\n");
closesocket(severSocket);
WSACleanup();
return -2;}
printf("bind成功\n");
//5.监听
r=listen(severSocket,10);
if(r==-1){
printf("listen失败\n");
closesocket(severSocket);
WSACleanup();
return -2;}
printf("listen成功\n");
//6.等待客户端连接 阻塞 尾生抱柱
clientSocket=accept(severSocket,(sockaddr*)&cAddr,&len);
if(clientSocket==SOCKET_ERROR){
printf("服务器宕机\n");
closesocket(severSocket);
WSACleanup();
return -2;}
printf("有客户端连接到服务器:%s!\n",inet_ntoa(cAddr.sin_addr));
//7.通信
char buff[1024];
while(1){
memset(buff,0,1024);
r=recv(clientSocket,buff,1023,NULL);
if(r>0){
buff[r]=0;//添加‘\0’
printf("接收>>%s\n",buff);}
memset(buff,0,1024);
printf("发送>>");
scanf("%s",buff);
printf("\n");
send(clientSocket,buff,strlen(buff),NULL);
}
//8.关闭socket
closesocket(severSocket);
//9.清除协议信息
WSACleanup();
return 0;
}
在这里插入代码片
客户端:
#include<stdio.h>
#include<windows.h>
#pragma comment(lib,"ws2_32.lib")
SOCKET clientSocket;
int main(){
//1.请求版本号
WSADATA wsaData;
WSAStartup(MAKEWORD(2,2),&wsaData);
if(LOBYTE(wsaData.wVersion)!=2||HIBYTE(wsaData.wVersion)!=2){
printf("连接失败\n");
return -1;
}
printf("请求协议成功\n");
//2.创建socket
clientSocket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);//通信协议类型,通信用的数据类型,保护方式
if(clientSocket==-1){
printf("创建socket失败\n");
WSACleanup();
return -2;}
printf("创建socket成功\n");
//3.获取服务器协议地址族
SOCKADDR_IN addr={0};
addr.sin_family=AF_INET;//协议版本
addr.sin_addr.S_un.S_addr=inet_addr("192.168.43.140");//用自己的
addr.sin_port=htons(10086);//用10000左右,小的端口被系统用到
//4.连接服务器
int r=connect(clientSocket,(sockaddr*)&addr,sizeof addr);
if(r==-1){
printf("连接服务器失败\n");
return -1;}
printf("连接服务器成功\n");
//5.通信
char buff[1024];
while(1){
memset(buff,0,1024);
printf("发送>>");
scanf("%s",buff);
printf("\n");
r=send(clientSocket,buff,strlen(buff),NULL);
memset(buff,0,1024);
r=recv(clientSocket,buff,1023,NULL);
if(r>0){
buff[r]=0;//添加‘\0’
printf("接受>>%s\n",buff);
}
}
return 0;
}
在这里插入代码片
运行效果: