【发布时间】:2014-08-31 10:12:10
【问题描述】:
我是套接字编程的新手...我试过这个服务器端程序
#define BUFLEN 512
#define MYPORT 3456
void errorp(char* msg)
{
perror(msg);
exit(1);
}
int main()
{
struct sockaddr_in server, client;
int sock;
int slen = sizeof(server);
int clen = sizeof(client);
char *recvbuf, senbuf[BUFLEN] = {'h','e','l','l','o'};
if((sock = socket(AF_INET, SOCK_DGRAM, 0) == -1))
errorp("Socket creation failed");
printf("To the client: %s, %s", senbuf, " World");
bzero(&server, sizeof(server));
server.sin_family = AF_INET;
server.sin_port = MYPORT;
server.sin_addr.s_addr = inet_addr("127.0.0.1");
if(bind(sock, (struct sockaddr*)&server, slen)==-1)
errorp("Socket Bind Failed");
if(recvfrom(sock, recvbuf, sizeof(recvbuf), 0, (struct sockaddr*) &client, &clen) == -1)
errorp("recv from error");
printf("From the client: %s", recvbuf);
if(sendto(sock, senbuf, sizeof(senbuf), 0, (struct sockaddr*) &client, sizeof(client)) == -1)
errorp("Error in sending");
printf("To the client: %s", senbuf);
close(sock);
return 0;
}
没有编译错误,但输出是
Socket Bind Failed: Socket operation on non-socket
To the client: hello, World
请帮我找出错误在哪里? 并帮助摆脱它
【问题讨论】:
-
旁注:端口号必须转换为网络字节顺序:
server.sin_port = htons(MYPORT);。 -
"没有编译错误 ..." 但至少如果您使用选项
-Wal -Wextra -pedantic进行编译,则会出现警告。 -
-Wal应该是-Wall。