一个SOCKET的小问题

goodbyeyou 2009-12-27 07:10:12
这是server端的程序
WSADATA wsaData;
BOOL ret = WSAStartup(MAKEWORD(2,2), &wsaData);
if(ret != 0)
{
MessageBox(_T("初始化套接字失败!"));
return;
}

//创建服务器端套接字
serverSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if(serverSocket == INVALID_SOCKET)
{
MessageBox(_T("creat wrong!"));
closesocket(serverSocket);
WSACleanup();
return ;
}

//绑定到本地一个端口上
sockaddr_in localaddr;
localaddr.sin_family = AF_INET;
localaddr.sin_port = htons(4000);
localaddr.sin_addr.s_addr =htonl(INADDR_ANY);
if(bind(serverSocket ,(const struct sockaddr*)&localaddr,sizeof(sockaddr)) == SOCKET_ERROR)
{
MessageBox(_T("绑定地址失败!"));
closesocket(serverSocket);
WSACleanup();
return;
}

//注册网络异步事件,m_hWnd为应用程序的主对话框或主窗口的句柄
WSAAsyncSelect(serverSocket, m_hWnd,NETWORK_EVENT, FD_ACCEPT | FD_CLOSE | FD_READ | FD_WRITE);

listen(serverSocket, 5); //设置侦听模式
int len = sizeof(sockaddr_in);
sockaddr_in clientaddr_in;

SOCKET clientSocket = accept(serverSocket, (struct sockaddr*)&clientaddr_in, &len);
//MessageBox(_T("失败!"));
return;
}




这是client端的程序




WSADATA wsaData;
BOOL ret = WSAStartup(MAKEWORD(2,2), &wsaData);
UpdateData(true);

CString servername ;
c_ip.GetWindowTextW(servername ); //读取服务器名称
int port;
port = 70;
//获取端口

sockaddr_in serveraddr;
//UpdateData(TRUE);
serveraddr.sin_family = AF_INET;
serveraddr.sin_port = htons(4000);
serveraddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
if (connect(clientsocket,(sockaddr*)&serveraddr,sizeof(serveraddr))!=0)
{MessageBox(_T("连接失败"));return;}
else
MessageBox(_T("连接成功"));
CString str;
str.Format(_T("a----->%s"),_T("进入聊天室"));
c_list.AddString(str);
int num =send(serversocket,(LPSTR)str.GetBuffer(0),str.GetLength(),0);
}
我在同一台机子上试的,先打开server的exe
在打开client的exe,为什么总在client的连接那里出错呢
不 是说127.0.0.1是一个回路吗
总是连不上啊
大家帮帮忙啊
...全文
101 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
goodbyeyou 2009-12-29
  • 打赏
  • 举报
回复
好了,现在连上了,谢谢大家了
明天去抢劫 2009-12-28
  • 打赏
  • 举报
回复
返回 -1判断
GetLastError() != WSAEWOULDBLOCK
如果是WSAEWOULDBLOCK,那等待异步窗口消息调用
cdm2179 2009-12-28
  • 打赏
  • 举报
回复
http://download.csdn.net/source/1936659源码
goodbyeyou 2009-12-28
  • 打赏
  • 举报
回复
是10035;
这是什么意思;
是不是因为堵塞的意思
wyx100 2009-12-28
  • 打赏
  • 举报
回复
连不上,错误号是多少?

用 WSAGetLastError();看下错误号!
zhaohongbo83 2009-12-28
  • 打赏
  • 举报
回复
连不上,错误号是多少?

用 WSAGetLastError();看下错误号!
  • 打赏
  • 举报
回复
clientsocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)
// 设置socket为窗口通知消息类型
::WSAAsyncSelect(clientsocket, m_hWnd,
WM_SOCKET, FD_CONNECT | FD_CLOSE | FD_WRITE | FD_READ);
=======================================================================
你是不是少写了这么一句,添上试试。可能没有为socket设置窗口通知消息类型
goodbyeyou 2009-12-27
  • 打赏
  • 举报
回复
不过加上以后防火墙发出了访问提示,应该对了一点了,谢谢
那是不是serversocket那边出错了啊,那边没有这个提示;在accept那应该有的啊
goodbyeyou 2009-12-27
  • 打赏
  • 举报
回复
我看了一下,成功时返回0;


二。我的确没有初始化clientsocket;
不过加上后还是不行
swolf520 2009-12-27
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 xuexi_123 的回复:]
clientsocket初始化了吗?
clientsocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)
[/Quote]


你的client未初始化socket
yushiqiang1688 2009-12-27
  • 打赏
  • 举报
回复
联机调度下呗。
  • 打赏
  • 举报
回复
clientsocket初始化了吗?
clientsocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)
oyljerry 2009-12-27
  • 打赏
  • 举报
回复
查看连接返回的错误时什么...

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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