#include "stdafx.h"
#include "winsock2.h"
#include "iostream"
#pragma comment (lib,"ws2_32")
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
WSADATA wsadata;
WSAStartup(MAKEWORD(2, 2), &wsadata);
cout << "开始创建套接字\n";
SOCKET s = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
struct sockaddr_in saddrin;
saddrin.sin_family = AF_INET;
saddrin.sin_addr.S_un.S_addr = inet_addr("INADDR_ANY");
saddrin.sin_port = htons(9100);
cout << "开始绑定\n";
bind(s, (sockaddr *)&saddrin, sizeof(saddrin));
cout << "开始监听\n";
listen(s, SOMAXCONN);
struct sockaddr_in sClient;
int num = sizeof(sClient);
SOCKET client= accept(s, (sockaddr *)&sClient, &num);
if (client)
{
cout << "已接受来自客户端的连接\n";
cout << sClient.sin_port<<'\n';
cout<< inet_ntoa(sClient.sin_addr)<<'\n';
char msg[MAXBYTE] = { 0 };
recv(client, msg, sizeof(msg), 0);
cout << msg;
//char msgReply[MAXBYTE ] = { 0 };
strcpy_s(msg, "this is a reply for the test\n");
send(client, msg, strlen(msg) + sizeof(char), 0);
cout << "已发送消息\n";
}
else
{
cout << "无客户端的连接";
}
system("PAUSE");
return 0;
}
答案是,把using namespace std注释掉,用printf或者std::cout。因为std里面有一个bind函数。
204换成16进制是0xcc,我记得这是vc初始化堆栈的时候使用的数据
也就是说你accept没有成功,所以里面没数据。
楼主可以看下是不是因为没有对定义的sockaddr_in变量进行初始化,里面的ip值被默认初始化为0xcccccccc,而十六进制cc转换为十进制就是204
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。