代码如下:
WORD wVersionRequested;
WSADATA wsaData;
wVersionRequested=MAKEWORD(2,2);if(WSAStartup(wVersionRequested,&wsaData)!=0){
MessageBox("winsock initial error!");
return;
}if(LOBYTE(wsaData.wVersion)!=2||HIBYTE(wsaData.wVersion)!=2){
WSACleanup();
MessageBox("winsock clean up!");
return;
}
SOCKET sockfd;
struct sockaddr_in addrin;if(sockfd=socket(AF_INET,SOCK_DGRAM,0)==INVALID_SOCKET){
MessageBox("can't open socket!");
return;
}memset((char *)&addrin,0,sizeof(addrin));
addrin.sin_family = AF_INET;
addrin.sin_addr.s_addr = inet_addr(m_serverIP_str);
addrin.sin_port = htons(6000);if(bind(sockfd,(struct sockaddr *)&addrin,sizeof(addrin))==SOCKET_ERROR){
int error=GetLastError();
CString mm;
mm.Format("bind error,ID %d",error);
MessageBox(mm);
return;
}char *msg="hello,socket!";
sendto(sockfd,msg,sizeof(msg),0,(struct sockaddr *)&addrin,sizeof(addrin));
.
.
.
执行的时候每次都报bind错误,由WSAGetLastError返回的错误代码为10038,经查意义如下:“
WSAENOTSOCK (10038) Socket operation on non-socket.
操作试图不是在套接字上进行。它可能是套接字句柄参数没有引用到一个合法套接字,或者是调用select()函数时,一个fd_set中的成员不合法。
”
本人实在搞不懂哪里有不对的地方,希望知道的朋友指点一二!感谢!
WORD wVersionRequested;
WSADATA wsaData;
wVersionRequested=MAKEWORD(2,2);if(WSAStartup(wVersionRequested,&wsaData)!=0){
MessageBox("winsock initial error!");
return;
}if(LOBYTE(wsaData.wVersion)!=2||HIBYTE(wsaData.wVersion)!=2){
WSACleanup();
MessageBox("winsock clean up!");
return;
}
SOCKET sockfd;
struct sockaddr_in addrin;if(sockfd=socket(AF_INET,SOCK_DGRAM,0)==INVALID_SOCKET){
MessageBox("can't open socket!");
return;
}memset((char *)&addrin,0,sizeof(addrin));
addrin.sin_family = AF_INET;
addrin.sin_addr.s_addr = inet_addr(m_serverIP_str);
addrin.sin_port = htons(6000);if(bind(sockfd,(struct sockaddr *)&addrin,sizeof(addrin))==SOCKET_ERROR){
int error=GetLastError();
CString mm;
mm.Format("bind error,ID %d",error);
MessageBox(mm);
return;
}char *msg="hello,socket!";
sendto(sockfd,msg,sizeof(msg),0,(struct sockaddr *)&addrin,sizeof(addrin));
.
.
.
执行的时候每次都报bind错误,由WSAGetLastError返回的错误代码为10038,经查意义如下:“
WSAENOTSOCK (10038) Socket operation on non-socket.
操作试图不是在套接字上进行。它可能是套接字句柄参数没有引用到一个合法套接字,或者是调用select()函数时,一个fd_set中的成员不合法。
”
本人实在搞不懂哪里有不对的地方,希望知道的朋友指点一二!感谢!
解决方案 »
- VC6编写IIS6.0上的ISAPI过滤器记录服务器上的非法信息的链接和网站标识
- vc 如何录制flash control播放出来的声音
- tab control切换tab时,如何刷新页面中的数据
- 添加自定义的函数问题
- COM接口问题,求大侠帮忙
- 高手请指教,这个回调函数的调用该怎么赋值?
- 请问CBrush画刷画出来的图片边缘是黑线,如何去掉该线?
- 怎样实现在程序的任何地方调用CMainFrame::OnCreate?也就是刷新它?
- 一些最基本的问题
- VC中一个搞不清的小问题,快给个帮忙呀!
- 如何把DLL文件加到主程序的资源中,运行主程序的时候,释放资源 ?
- 判断字符串是否相等?求函数。(在线等 立即给分)
改为addrin.sin_addr.S_un.S_addr = inet_addr(m_serverIP_str);另外,UDP好像不需要指定port,反正我没有指定。
上述代码中
if(sockfd=socket(AF_INET,SOCK_DGRAM,0)==INVALID_SOCKET){
一行改为
if((sockfd=socket(AF_INET,SOCK_DGRAM,0))==INVALID_SOCKET){
少个括号而已,faint~!!!分自己拿了!
#define s_addr S_un.S_addr
:-)
另,UDP不需要指定端口?可否详述?
偶这个是需要bind的:-)谢谢楼上两位热心朋友!
指定了也被忽略