socket 通信接收不到数据 我是用recv()接收的

xc138 2007-06-06 11:49:29
server 端
#include<winsock2.h>
#include<iostream>
#include<windows.h>
using namespace std;
int main()
{
int clientlen;
struct sockaddr_in clientaddr;
struct hostent *hp;
char chInfo[64];
char *haddrp;
char buffer[5];
int length;
WSADATA wsaData;
WORD a=MAKEWORD(2,3);
int ret = WSAStartup(MAKEWORD(9,9), &wsaData);
if (ret != 0)
{
cout<<"Error"<<endl;
WSACleanup();
}

if (gethostname(chInfo, sizeof(chInfo)))
{
cout<<"\n无法获取主机!\n ";
}


cout<<chInfo<<endl;


SOCKET serverSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if(serverSocket == INVALID_SOCKET)
{
MessageBox(0,"创建套接字失败!","Warning", MB_ICONEXCLAMATION);
closesocket( serverSocket);
WSACleanup();
}


sockaddr_in localaddr;
localaddr.sin_family = AF_INET;
localaddr.sin_port = htons(6000);
localaddr.sin_addr.s_addr = htonl(INADDR_ANY);
if(bind(serverSocket ,(const struct sockaddr*)&localaddr,
sizeof(sockaddr)) == SOCKET_ERROR)
{
MessageBox(0,"绑定地址失败!","Warning", MB_ICONEXCLAMATION);
closesocket( serverSocket);
WSACleanup();
}

listen(serverSocket, 5);

while(1)
{
clientlen = sizeof(clientaddr);
SOCKET connfd = accept(serverSocket,(struct sockaddr *) &clientaddr,&clientlen);
hp = gethostbyaddr((const char *)&clientaddr.sin_addr.S_un,sizeof(clientaddr.sin_addr.S_un),AF_INET);
haddrp = inet_ntoa(clientaddr.sin_addr);
cout<<"server connented to "<<hp->h_name<<"("<<haddrp<<")"<<endl;
if ((length = recv(serverSocket, buffer, 5, 0)) == SOCKET_ERROR)
MessageBox(0,"接收失败!","Warning", MB_ICONEXCLAMATION);
for(int i=0;i<length;i++)
cout<<buffer[i];
cout<<endl;
closesocket(connfd);
}
WSACleanup();
return 0;
}
client 端

#include<winsock2.h>
#include<iostream>
#include<windows.h>
#include <memory.h>
using namespace std;
int main()
{

struct hostent *hp;
int length;
char buffer[5];
struct in_addr addr;
struct sockaddr_in serveraddr;
WSADATA wsaData;
int ret = WSAStartup(MAKEWORD(2,2), &wsaData);
if (ret != 0)
{
cout<<"Error"<<endl;
WSACleanup();
}


SOCKET clientfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if(clientfd == INVALID_SOCKET)
{
MessageBox(0,"创建套接字失败!","Warning", MB_ICONEXCLAMATION);
closesocket( clientfd);
WSACleanup();
}
addr.s_addr = inet_addr("192.168.1.102");
hp=gethostbyaddr((const char *)&addr,sizeof(addr),AF_INET);

memset(&serveraddr,'\0',sizeof(struct sockaddr_in));
memcpy((char*)&serveraddr.sin_addr,(char *)hp->h_addr,hp->h_length);

serveraddr.sin_family = hp->h_addrtype;
serveraddr.sin_port = htons(6000);
if(connect(clientfd, (struct sockaddr *)&serveraddr, sizeof(serveraddr))<0)
cout<<"error"<<endl;
for(int i=0;i<5;i++)
buffer[i]='a';
if ((length = send(clientfd, buffer, 5, 0)) == SOCKET_ERROR)
MessageBox(0,"发送失败!","Warning", MB_ICONEXCLAMATION);


closesocket(clientfd);

WSACleanup();
return 0;



}
...全文
323 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
yc_8301 2007-06-06
  • 打赏
  • 举报
回复
server 端的代码有问题
if ((length = recv(serverSocket, buffer, 5, 0)) == SOCKET_ERROR)
换成
if ((length = recv(connfd, buffer, 5, 0)) == SOCKET_ERROR)
就OK了!!
AiNiLife 2007-06-06
  • 打赏
  • 举报
回复
yun.两个一样的帖 我都是sf haha

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧