C++实例(简单的Windows套接字(Socket)例子)

C++实例(简单的Windows套接字(Socket)例子),第1张

C++实例(简单的Windows套接字(Socket)例子),第2张

server8000端口号,例如server 8000
Client.exe IP地址端口号,例如Client 127.0.0.1 8000
。然后,在客户端的命令行中,输入字符串并按enter键。客户端将消息发送到服务器,服务器将消息发送回客户端。
在服务器端,server . CPP
/server . CPP
# include
# include
# pragma comment(lib," ws2 _ 32 . lib ")
int main(int argc,char * argv[]){
//确定端口号
if(argc!=2){
printf("用法:%s端口号\n ",argv[0]);
exit(-1);
}
/将端口号转换为整数
短端口;
if((port = atoi(argv[1])= = 0){
printf("端口号错误!");
exit(-1);
}
wsa data wsa;
//初始化套接字DLL
if (WSA启动(Make Word (2,2),&WSA)!=0){
printf("套接字初始化失败!");
exit(-1);
}
/创建套接字
套接字服务器套接字;
if((server socket = socket(AF _ inet,sock _ stream,IP proto _ TCP))= = invalid _ socket){
printf("创建套接字失败!");
exit(-1);
}
struct sockaddr _ in server address;
memset(&serverAddress,0,sizeof(sockaddr _ in));
server address . sin _ family = AF _ INET;
serverAddress.sin_addrS_un。s _ addr = htonl(in addr _ ANY);
server address . sin _ port = htons(port);
//bind
if(bind(server socket,(sockaddr *) & serveraddress,sizeof(server address))= = socket _ error){
printf(" socket绑定端口失败!端口:%d\n ",端口);
exit(-1);
}
/进入监听状态
if (listen (server socket,somaxconn)= = socket _ error){
printf("监听失败!");
exit(-1);
}
printf("服务器%d正在侦听......\n ",端口);
套接字客户端套接字;//用于与客户端通信的套接字
structsockaddr _ in客户端地址;//用于与客户端通信的套接字地址
memset (& clientaddress,0,sizeof(client address));
int addrlen = sizeof(client address);
//接受连接
if((客户端套接字= accept(服务器套接字,(sockaddr *) &客户端地址,& addrlen))= = invalid _ socket){
printf("无法接受客户端连接!");
exit(-1);
}
printf("接受来自%s\n的连接",inet _ ntoa(client address . sin _ addr));
char buf[4096];
while(1){
/接收数据
int bytes;
if((bytes = recv(client socket,BUF,sizeof (BUF),0))= = socket _ error){
printf("接收数据失败!\ n ");
exit(-1);
}
buf[bytes]= ' \ 0 ';
printf("来自%s的消息:%s\n ",inet _ ntoa(client address . sin _ addr),buf);
if (send (client socket,BUF,bytes,0) = = socket _ error) {
printf("发送数据失败!");
exit(-1);
}
}
/清理socket
WSACleanup()占用的资源;
返回0;
}
client,client . CPP
/client . CPP
# include
# include
# pragma comment(lib," ws2 _ 32 . lib ")
int main(int argc,char * argv[]){
//确定IP地址和端口号
if(argc!=3){
printf("用法:%s IPAddress PortNumber\n ",argv[0]);
exit(-1);
}
/将字符串的IP地址转换为u _ long
unsigned long IP;
if((IP = inet _ addr(argv[1])= = in addr _ none){
printf("非法IP地址:%s ",argv[1]);
exit(-1);
}
/将端口号转换为整数
短端口;
if((port = atoi(argv[2])= = 0){
printf("端口号错误!");
exit(-1);
}
printf("连接到%s:%d......\n ",inet_ntoa(*(in_addr*)&ip),port);
wsa data wsa;
//初始化套接字DLL
if (WSA启动(Make Word (2,2),&WSA)!=0){
printf("套接字初始化失败!");
exit(-1);
}
/创建SOCKET
SOCKET sock;
if ((sock = socket (AF _ inet,sock _ stream,IP proto _ TCP))= = invalid _ socket){
printf("创建套接字失败!");
exit(-1);
}
struct sockaddr _ in server address;
memset(&serverAddress,0,sizeof(sockaddr _ in));
server address . sin _ family = AF _ INET;
serverAddress.sin_addrS_un。S _ addr = ip
server address . sin _ port = htons(port);
//与服务器建立连接
if (connect (sock,(sockaddr *) & serveraddress,sizeof(server address))= = socket _ error){
printf("建立连接失败!");
exit(-1);
}
char buf[4096];
while(1){
printf(" > ");
//从控制台读取一行数据
gets(buf);
//发送到服务器
if (send (sock,BUF,strlen (BUF),0) = = socket _ error) {
printf("发送数据失败!");
exit(-1);
}
int bytes;
if ((bytes = recv (sock,buf,sizeof (buf),0))= = socket _ error){
printf("接收数据失败!\ n ");
exit(-1);
}
buf[bytes]= ' \ 0 ';
printf("来自%s的消息:%s\n ",inet _ ntoa(server address . sin _ addr),buf);
}
/清理socket
WSACleanup()占用的资源;
返回0;
}

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » C++实例(简单的Windows套接字(Socket)例子)

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情