C++网络编程,能发送消息,接收不到消息

大_爱 2011-12-23 11:24:30


#include <Winsock2.h>
#include <stdio.h>
#include <string.h>
#include <windows.h>

int main() {
WORD wVersionRequested;
WSADATA wsaData;
int err;

wVersionRequested = MAKEWORD( 1, 1 );

err = WSAStartup(wVersionRequested, &wsaData);
if (err != 0) {
return -1;
}

if (LOBYTE( wsaData.wVersion ) != 1 || HIBYTE( wsaData.wVersion ) != 1) {
WSACleanup();
return -1;
}
SOCKET sockSrv = socket(AF_INET, SOCK_STREAM, 0);

SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
addrSrv.sin_family = AF_INET;
addrSrv.sin_port = htons(6000);

bind(sockSrv, (SOCKADDR*) &addrSrv, sizeof(SOCKADDR));

listen(sockSrv, 5);

SOCKADDR_IN addrClient;
int len = sizeof(SOCKADDR);

while (1) {
SOCKET sockConn = accept(sockSrv, (SOCKADDR*) &addrClient, &len);
printf("有客户连接过来了\n");

send(sockConn, "SUCCESS", strlen("SUCCESS") + 1, 0);

char recvBuf[100];
recv(sockConn, recvBuf, 100, 0);
printf("%s\n", recvBuf);

memset(recvBuf, 0x0, 100 * sizeof(char));
closesocket(sockConn);
}
return 0;
}


这是网上找的代码,现在是当客户端连接上来的时候客户端能收到消息,可是客户端发送过来的消息这里打印不出来。还有上面的“有客户连接过来了”也打印不出来。麻烦大家帮忙看看。
...全文
241 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
大_爱 2011-12-23
  • 打赏
  • 举报
回复
保存了也编译了,是啊,那句话,是没有打印,但是客户端确实能收到消息
恨天低 2011-12-23
  • 打赏
  • 举报
回复
那你说printf("有客户连接过来了\n");这个没打印??

你有没保存代码?从新编译啊?
大_爱 2011-12-23
  • 打赏
  • 举报
回复
send(sockConn, "SUCCESS", strlen("SUCCESS") + 1, 0);

里面的SUCCESS 在客户端是能收到的。
恨天低 2011-12-23
  • 打赏
  • 举报
回复
你的客户端收到什么消息了?connect(sockClient, (SOCKADDR*) &addrSrv, sizeof(SOCKADDR));

估计你connect都没能成功,你都不判断返回值的?

大_爱 2011-12-23
  • 打赏
  • 举报
回复
客户端发送的消息服务器收不到。
大_爱 2011-12-23
  • 打赏
  • 举报
回复


#include <Winsock2.h>
#include <stdio.h>

int main() {
WORD wVersionRequested;
WSADATA wsaData;
int err;

wVersionRequested = MAKEWORD( 1, 1 );

err = WSAStartup(wVersionRequested, &wsaData);
if (err != 0) {
return -1;
}

if (LOBYTE( wsaData.wVersion ) != 1 || HIBYTE( wsaData.wVersion ) != 1) {
WSACleanup();
return -1;
}
SOCKET sockClient = socket(AF_INET, SOCK_STREAM, 0);

SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr = inet_addr("127.0.0.1 ");
addrSrv.sin_family = AF_INET;
addrSrv.sin_port = htons(6000);

connect(sockClient, (SOCKADDR*) &addrSrv, sizeof(SOCKADDR));

char recvBuf[50];
recv(sockClient, recvBuf, 50, 0);
printf("%s\n", recvBuf);

send(sockClient, "Thisislisi", strlen("Thisislisi") + 1, 0);

memset(recvBuf, 0x0, 100 * sizeof(char));
closesocket(sockClient);
WSACleanup();
return 0;
}

大_爱 2011-12-23
  • 打赏
  • 举报
回复
如何抓包呀!
恨天低 2011-12-23
  • 打赏
  • 举报
回复
accept一直在等待客户端调用connect。

看样子是客户端没连接成功,accept一直没返回。

现在是当客户端连接上来的时候客户端能收到消息??

贴下你的客户端代码吧
pengfoo 2011-12-23
  • 打赏
  • 举报
回复
SOCKET sockConn = accept(sockSrv, (SOCKADDR*) &addrClient, &len);
有一返回值,你看看这个值是不是大于0?收到了数据?
可以去抓包看看 这边是不是收到了数据
大_爱 2011-12-23
  • 打赏
  • 举报
回复
果然是编译器不同,而造成的问题。在DEV-C++中编译出来的代码就能行
用eclipse + minGW编译出来就不行,今天郁闷了一天了,。
大_爱 2011-12-23
  • 打赏
  • 举报
回复
引用 也用不了

字符数组如何初始化呀,我实在没找到问题所在,估计和编译器有点关系
大_爱 2011-12-23
  • 打赏
  • 举报
回复
我用的是mingw这个编译器,不知道是不是有什么影响
luciferisnotsatan 2011-12-23
  • 打赏
  • 举报
回复
char recvBuf[50];
memset(recvBuf, 0x0, 100 * sizeof(char));

除了客户端memset越界了,运行没什么问题。

另外,最好把recvBuf初始化下。
一介丶草民 2011-12-23
  • 打赏
  • 举报
回复
在while(1) 前面打印一句话看看程序走到哪了?在看下sockConn 的值是多少。。
大_爱 2011-12-23
  • 打赏
  • 举报
回复
现在更奇怪了,一直输出这句话。
大_爱 2011-12-23
  • 打赏
  • 举报
回复
真的这样的,printf我也没动过的,都是标准的
luciferisnotsatan 2011-12-23
  • 打赏
  • 举报
回复
抓包可以用Ethereal
luciferisnotsatan 2011-12-23
  • 打赏
  • 举报
回复
怎么可能?
printf在send前,怎么会没打印?
该不会标准输出重定向了吧。

64,683

社区成员

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

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