📄 server.cpp
字号:
#include<string.h>
#include<stdio.h>
#include <iostream.h>
#include<winsock.h>
#pragma comment(lib,"wsock32.lib")
void main()
{
WORD wVersionRequested; //存版本号用的
WSADATA wsaData; // ADATA的类型 用于实现细节
int err;
//WinSock以DLL的形式提供,在调用任何WinSock API之前,必须调用函数WSAStartup进行初始化
wVersionRequested=MAKEWORD(1,1);//版本号
err=WSAStartup(wVersionRequested,&wsaData);
if (err!=0) ///判断 winsoket是否初化成功
{
cout<<"初始化失败"<<endl;
err=WSACleanup();
return;
}
else
cout<<"初始化成功"<<endl;
//启动socket通过SOCKET socket( int af, int type, int protocol)函数;
SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0);
//以下开始Bind
//其中htons函数负责将主机unsigned short 类型的数据转换成网络上的unsigned short 类型的数据
sockaddr_in addrSrv;
addrSrv.sin_family= AF_INET;
addrSrv.sin_port=htons(3624); //使用3624端口
addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY); //INADDR_ANY,则套接字将被绑定到默认的IP地址
//bind() 将一本地地址与一个SOCKET描述字捆绑在一起
bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
listen(sockSrv,5);
SOCKADDR_IN addrClient; ///客户机
int len =sizeof(SOCKADDR);
//recvfrom() 接收一个数据报并保存源地址。
while(1)//保证服务器一直处在惊醒状态
{
SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);
//接受客户端 接受端口
//char sendBuf[100];接受缓冲区的长度
char sendBuf[100]="与服务器连接成功";
sendto(sockConn,sendBuf,100,0,(SOCKADDR*)&addrClient,len);
char recvBuf[100];//接受缓冲区的长度
recvfrom(sockConn,recvBuf,100,0,(SOCKADDR*)&addrClient,&len);
cout<<recvBuf<<endl;
cout<<"请等待客户机的请求...."<<endl;
recvfrom(sockConn,recvBuf,100,0,(SOCKADDR*)&addrClient,&len);
cout<<recvBuf<<endl;
cout<<"输入你的回复"<<endl;
cin>>sendBuf;
sendto(sockConn,sendBuf,100,0,(SOCKADDR*)&addrClient,len);
cout<<"您的回复发送成功....."<<endl;
cout<<"请等待客户机是否要继续...."<<endl;
recvfrom(sockConn,recvBuf,100,0,(SOCKADDR*)&addrClient,&len);///确认是否继续通信
while(recvBuf[0]=='y')
{
cout<<"请等待客户机发消息....."<<endl;
recvfrom(sockConn,recvBuf,100,0,(SOCKADDR*)&addrClient,&len);///接收数据
cout<<recvBuf<<endl;
cout<<"输入你的回复"<<endl;
cin>>sendBuf;
sendto(sockConn,sendBuf,100,0,(SOCKADDR*)&addrClient,len);
cout<<"您的回复发送成功....."<<endl;
cout<<"请等待客户机是否要继续...."<<endl;
recvfrom(sockConn,recvBuf,100,0,(SOCKADDR*)&addrClient,&len);///确认是否继续通信
}
if(recvBuf[0]!='y')
{
cout<<"客户机断开"<<endl;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -