BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #8966同步于 2008/6/28
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

socket 出现的listen()函数的错误 请教大牛。。。

Robert728999
2008/6/28镜像同步6 回复
#include "stdafx.h" #include "winsock.h" #include "stdlib.h" #include <sys/types.h> #pragma comment (lib, "wsock32.lib") void usage(char *name) { fprintf(stderr, "usage: %s [port]\n",name); } int main(int argc,char *argv[]) { SOCKET servsock, clisock; struct sockaddr_in sa; struct sockaddr_in cliaddr; int len; int err; char buff[560]; int servport=65; WSADATA wsd; if(argc>2) { usage(argv[0]); return -1; } if(argc==2) { servport = atoi(argv[1]); if(servport>65535||servport<1) { usage(argv[0]); return -2; } } //Initiallizing if(WSAStartup(MAKEWORD(1,1),&wsd)!=0) { printf("WSAStartup() failed ! \n"); return -3; } //Creating Socket printf("Creating Socket ...\n"); servsock = socket(AF_INET, SOCK_DGRAM, 0); //UDP protocool if(servsock==INVALID_SOCKET) { fprintf(stderr, "socket() failed: %d \n", WSAGetLastError()); return -4; } printf("[Pass]\n"); //Filling serve's add struct memset(&sa,0,sizeof(sa)); sa.sin_family =AF_INET; sa.sin_port =htons(servport); sa.sin_addr.S_un.S_addr=htonl(INADDR_ANY); //绑定 socket 到服务器地址结构 printf("Binding ... \n"); err = bind(servsock, (const sockaddr *)&sa,sizeof(sa)); if(err!=0) { fprintf(stderr, "bind() failed : %d\n",WSAGetLastError()); return -5; } printf("[Pass]\n"); //? //Listenning printf("Listenning ...\n"); err = listen(servsock,1); if(err!=0) { fprintf(stderr, "listen() failed : %d\n",WSAGetLastError()); return -6; } printf("[Pass]\n"); //? /*WSAEOPNOTSUPP (10045) &#8226; Translation: Operation not supported. &#8226; Description: The operation that was tried is not supported for the type of object that is referenced. This error typically occurs when a socket descriptor to a socket that cannot support this operation is trying to accept a connection on a datagram socket. */ //Linking while(1) { printf("waiting request ...\n"); len = sizeof(cliaddr); clisock = accept(servsock, (struct sockaddr *)&cliaddr, &len); if(clisock == INVALID_SOCKET) { fprintf(stderr, "accept() failed : %d\n",WSAGetLastError()); closesocket(servsock); return -7; } printf("accept client: %s:%d\n", inet_ntoa(cliaddr.sin_addr),ntohs(cliaddr.sin_port)); send(clisock, buff, strlen(buff), 0); //close link closesocket(clisock); printf("[server pass]\n"); } closesocket(servsock); WSACleanup(); return 0; } 以上是服务器端的程序,在listen()处的注释是错误信息,在MS上找的,为什么呢?怎么改呢? ps:真的不会用MS的东东啊。。。。
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
rebirthatsix机器人#1 · 2008/6/28
udp....listen?
jeff851212机器人#2 · 2008/6/28
bind?SOCK_DGRAM?
zhaotong机器人#3 · 2008/6/28
UDP的协议,不能调用listen,面向连接的才需要调用listen ps: Error code: 10045
Robert728999机器人#4 · 2008/6/28
【 在 zhaotong 的大作中提到: 】 : UDP的协议,不能调用listen,面向连接的才需要调用listen : ps: : Error code: 10045 丢人了。。。。5555~~~ 赞过来人!!!
ATV机器人#5 · 2008/6/28
udp有accept么?怎么没感觉了...
Robert728999机器人#6 · 2008/6/28
没有~ listen() accept()都是TCP/IP