64,642
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <winsock.h>
#pragma comment(lib,"ws2_32.lib")
int port = 6789;
int main()
{
WSAData wsadata;
if(WSAStartup(MAKEWORD(1,1), &wsadata))
return 0;
int socket_descrīptor;
int iter = 0;
char buf[80];
struct sockaddr_in address;
/* Initialize socket address structure for Interner Protocols */
ZeroMemory(&address, sizeof(address)); // empty data structure
address.sin_family = AF_INET;
address.sin_addr.s_addr = inet_addr("192.168.xx.xx");
address.sin_port = htons(port);
/* Create a UDP socket */
socket_descrīptor = socket(AF_INET, SOCK_DGRAM, 0);
//Loop 20 times (a nice round number ) sending data
for(iter = 0; iter <= 20; iter++)
{
sprintf(buf, "data packet with ID %d\n", iter);
sendto(socket_descrīptor, buf, sizeof(buf), 0, (struct sockaddr *)&address, sizeof(address));
}
/* send a termination message */
sprintf(buf, "stop\n");
sendto(socket_descrīptor, buf, sizeof(buf), 0, (struct sockaddr *)&address, sizeof(address)); //address is the target of the message send
printf("Message Sent, Terminating\n");
WSACleanup();
return 0;
}
**************************** server.cpp ***********************************
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <winsock.h>
#pragma comment(lib,"ws2_32.lib")
int port = 6789;
int main()
{WSAData wsadata;
if(WSAStartup(MAKEWORD(1,1), &wsadata))
return 0;
int sin_len;
char message[256];
int socket_descrīptor;
struct sockaddr_in sin;
printf("Waiting for data from sender\n");
// Initialize socket address structure for Internet Protocols
ZeroMemory(&sin, sizeof(sin));
sin.sin_family = AF_INET;
sin.sin_addr.s_addr = htonl(INADDR_ANY);
sin.sin_port = htons(port);
sin_len = sizeof(sin);
//Create a UDP socket and bind it to the port
socket_descrīptor = socket(AF_INET, SOCK_DGRAM, 0);
bind(socket_descrīptor, (struct sockaddr *)&sin, sizeof(sin));
//Loop forever (or until a termination message is received)
// Received data through the socket and process it.The processing in this program is really simple --printing
while(1)
{
recvfrom(socket_descrīptor, message, sizeof(message), 0, (struct sockaddr *)&sin, &sin_len);
printf("Response from server : %s\n", message);
if(strncmp(message, "stop", 4) == 0)
{
printf("sender has told me to end the connection\n");
}
}
WSACleanup();
return 0;
}
可以局域网通信,但转到广域网之后就不行了,麻烦那位高人帮我改改可以吗