返回信息流#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)
• Translation: Operation not supported.
• 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的东东啊。。。。
这是一条镜像帖。来源:北邮人论坛 / cpp / #8966同步于 2008/6/28
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
socket 出现的listen()函数的错误 请教大牛。。。
Robert728999
2008/6/28镜像同步6 回复
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
【 在 zhaotong 的大作中提到: 】
: UDP的协议,不能调用listen,面向连接的才需要调用listen
: ps:
: Error code: 10045
丢人了。。。。5555~~~
赞过来人!!!