在线等待:socket中send和recv的迷惑
小弟想写一个简单的socket程序,实现客户端到服务端的简单通信,服务端和客户端都是通一台机器,大概功能是:
客户和服务器连接后,
1、服务端发送“Hello,Welcome to server”给客户端并打印
2、客户端收到欢迎消息,再发送ip地址给服务器
3、服务端打印客户发来的ip地址“172.168.2.23 is connected”,假设客户端ip地址是172.168.2.23
服务端主要代码:
while(1)
{
SOCKET sockconn=accept(sockSvr,(sockaddr *)&addrClient,&len);
sprintf(sendBuf,"Hello,Welcome to server");
send(sockconn,sendBuf,strlen(sendBuf)+1,0); //发送欢迎消息给客户端
recv(sockconn,revBufs,12,0); //准备接收客户端发过来的ip地址
printf("%s is connected\n",revBufs); //打印客户端地址
closesocket(sockconn);
}
客户端主要代码:
SOCKET sockClint=socket(AF_INET,SOCK_STREAM,0);
SOCKADDR_IN addrSrv;
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(6000);
addrSrv.sin_addr.S_un.S_addr=inet_addr("172.168.2.23");
connect(sockClint,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
char revBuf[100];
recv(sockClint,revBuf,100,0);
printf("%s\n",revBuf); //打印欢迎消息
hostent* host = gethostbyname("");
char *lpIP = inet_ntoa(*(struct in_addr*)*(host->h_addr_list)); //获取本机ip地址
char ips[13];
for(int i=0;i<12;i++)
ips[i]=*(lpIP+i); //将ip地址放到一个数组,
ips[i]='\0';
send(sockClint,ips,sizeof(ips),0); //发送装有客户端ip的数组
closesocket(sockClint);
WSACleanup();
客户端窗口收到了主机发过来的信息
Hello,Welcome to server
但服务端显示为:
172.168.2.23Hello,Welcome to server is connected
而我希望的是172.168.2.23 is connected,
为什么是这样的结果呢,貌似服务端发的消息又被服务端收到了,这明明是发给客户端的
调试的时候发现:服务端得revBufs数组放的数据就是172.168.2.23Hello,Welcome to server is connected,
请大侠们帮忙看一看??
[解决办法]
recv(sockconn,revBufs,12,0);前加一句memset(revBufs,0,sizeof(revBufs));
[解决办法]