截至包裹我的头周围UDP套接字的尝试我试图移植代码本教程页面http://www.linuxhowtos.org/C_C++/socket.htm到的Winsock(在Win 8上运行,如果它事项)。 [下面直接链接]
在目前的代码编译和运行,但我从来没有收到一个数据包,这两个程序就等着和recvfrom的块()。 我一直有这个代码的修改版本同样的问题(例如https://stackoverflow.com/a/679529/873217包括recvfrom的()调用,而与此代码C ++问题数据报(UDP)WINSOCKET到SENDTO和recvfrom通过环回适配器在同一插座上进行更改的建议)。 我想我在做一些简单和基本的错误; 但我无法找到它在我自己的。 希望更有经验的人可以照一些轻就这个问题对我来说。 谢谢。
补充说明:
我运行的exe文件服务器,然后在同一台计算机上的客户端EXE。 它连接到互联网。 我已经使用解析为我的IP地址和域名尝试。 我也曾尝试禁用防火墙,尽管我已批准这两个方案完全访问权限。
直接链接到原始客户端和服务器端的代码:
http://www.linuxhowtos.org/data/6/client_udp.c
http://www.linuxhowtos.org/data/6/server_udp.c
我目前的尝试:
首尾相连libws2_32.a
客户代码:
#include <stdio.h>
#include <winsock2.h>
#include <string.h>
void error(const char *);
int main()
{
WSAData data;
WSAStartup( MAKEWORD( 2, 2 ), &data );
int sock, n;
int length;
struct sockaddr_in server, from;
struct hostent *hp;
char buffer[256];
unsigned short serverPort = 27072;
sock = socket(AF_INET, SOCK_DGRAM, 0);
if (sock < 0) error("socket");
server.sin_family = AF_INET;
hp = gethostbyname("localhost");//have also tried my url
if (hp==0) error("Unknown host");
memmove((char *)hp->h_addr, (char *)&server.sin_addr, hp->h_length);
server.sin_port = htons(serverPort);
length = sizeof(struct sockaddr_in);
printf("Please enter the message: ");
memset(buffer, 0, 256);
fgets(buffer, 255, stdin);
n = sendto (sock, buffer, strlen(buffer), 0, (const struct sockaddr *)&server, length);
if (n < 0) error("Sendto");
printf("sent %i bytes\n", n);
n = recvfrom(sock, buffer, 256, 0, (struct sockaddr *)&server, &length);
if (n < 0) error("recvfrom");
//write(1,"Got an ack: ", 12);
//write(1, buffer, n);
printf("Got msg: %s\n",buffer);
closesocket(sock);
WSACleanup();
return(0);
}
void error(const char *msg)
{
perror(msg);
exit(0);
}
服务器代码:
#include <stdio.h>
#include <winsock2.h>
#include <string.h>
void error(const char *);
int main()
{
WSAData data;
WSAStartup( MAKEWORD( 2, 2 ), &data );
int sock, length, n;
int fromlen;
struct sockaddr_in server;
struct sockaddr_in from;
char buf[1024];
unsigned short serverPort = 27072;
sock=socket(AF_INET, SOCK_DGRAM, 0);
if (sock < 0) error("Opening socket");
length = sizeof(server);
memset(&server, 0, length);
server.sin_family = AF_INET;
server.sin_addr.s_addr=INADDR_ANY;
server.sin_port=htons(serverPort);
if (bind(sock,(struct sockaddr *)&server, length)<0) error ("binding");
fromlen = sizeof(struct sockaddr_in);
while(1)
{
n = recvfrom(sock, buf, 1024, 0, (struct sockaddr *)&from, &fromlen);
if (n<0) error("recvfrom");
//write(1,"Received a datagram: ", 21);
//write(1,buf,n);
printf("Received a datagram: %s", buf);
n = sendto(sock, "Got your message\n",17,0,(struct sockaddr *)&from,fromlen);
if (n<0)error("sendto");
}
closesocket(sock);
WSACleanup();
return 0;
}
void error (const char *msg)
{
perror(msg);
exit(0);
}