#include <iostream>
#include<winsock2.h>
#pragma comment(lib,"ws2_32.lib")
using namespace std;
int main(){
WSADATA wsaData;
if(WSAStartup(MAKEWORD(2,2), &wsaData)) //初始化 WinSock 协议栈
{
cout<<"Winsock 不能被初始化!";
WSACleanup();
return 0;
}
SOCKET sockSer, sockConn; //注意服务器端必须创建两个套接字
sockSer=socket(AF_INET,SOCK_STREAM,0); //初始化套接字
SOCKADDR_IN addrSer,addrCli; //注意服务器端要创建两个套接字地址
addrSer.sin_family=AF_INET;
addrSer.sin_port=htons(5566);
addrSer.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
bind(sockSer,(SOCKADDR*)&addrSer,sizeof(SOCKADDR)); //绑定套接字
listen(sockSer,5); //监听
int len=sizeof(SOCKADDR);
cout<<"服务器等待客户端的连接……"<<endl;
sockConn=accept(sockSer,(SOCKADDR*)&addrCli,&len); //接受连接,注意返回值
if(sockConn==INVALID_SOCKET){
cout<<"服务器接受客户端连接失败!"<<endl;
return 0;
}
else cout<<"服务器接受客户端连接成功!"<<endl;
char sendbuf[256],recvbuf[256];
while(1){
if(recv(sockConn,recvbuf,256,0)>0) //如果 recv 返回值大于 0 则输出消息
cout<<"客户端说:>"<<recvbuf<<endl;
else {
cout<<"客户端已断开连接"<<endl;
break;
}
cout<<"服务器说:>";
cin>>sendbuf; //将用户输入保存到 sendbuf 中
if(strcmp(sendbuf,"bye")==0){
break;
} //输入 bye 则退出 while 循环
send(sockConn,sendbuf,strlen(sendbuf)+1,0); //发送消息
}
closesocket(sockSer);
WSACleanup();
return 0;
}
评论0