cpp实现
UDPServer.cpp
#include<sys/types.h>
#include<sys/socket.h>
#include<unistd.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<stdio.h>
#include<string.h>
#define SERVER_PORT 10001
#define BUFFER_SIZE 1024
int main(){
int server_socket = socket(AF_INET, SOCK_DGRAM, 0);
if(server_socket < 0){
perror("create socket failed");
return 1;
}
struct sockaddr_in server_addr;
bzero(&server_addr, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
server_addr.sin_port = htons(SERVER_PORT);
if(bind(server_socket, (struct sockaddr*)&server_addr, sizeof(server_addr)) < 0){
perror("bind address error");
return 1;
}
while(1){
struct sockaddr_in client_addr;
socklen_t client_addr_len = sizeof(client_addr);
printf("waiting to receive data.....\n");
char buffer[BUFFER_SIZE];
int recv_len = (int)recvfrom(server_socket, buffer, BUFFER_SIZE,
0,(struct sockaddr*)&client_addr,&client_addr_len);
if(recv_len < 0){
perror("receive data failed");
return 1;
}
buffer[recv_len] = '\0';
if(strcmp(buffer, "quit") == 0) break;
printf("receive data from %s:%d :\n", inet_ntoa(client_addr.sin_addr), htons(client_addr.sin_port));
printf("%s\n", buffer);
}
close(server_socket);
return 0;
}
UDPClient.cpp
#include<sys/types.h>
#include<sys/socket.h>
#include<unistd.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<stdio.h>
#include<string.h>
#define SERVER_PORT 10001
#define BUFFER_SIZE 1024
int main(){
int client_socket = socket(AF_INET, SOCK_DGRAM, 0);
if(client_socket < 0){
perror("create socket failed");
return 1;
}
struct sockaddr_in server_addr;
bzero(&server_addr, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
server_addr.sin_port = htons(SERVER_PORT);
char buffer[BUFFER_SIZE];
while(1){
printf("Input a word >");
scanf("%s", buffer);
ssize_t byte_count = sendto(client_socket, buffer, strlen(buffer), 0,
(struct sockaddr*)& server_addr, sizeof(server_addr));
if(byte_count < 0){
perror("sendto data failed");
return 1;
}
if(strcmp(buffer, "quit") == 0){
break;
}
}
close(client_socket);
return 0;
}
python 实现
UDPServer.py
import socket
address = ('127.0.0.1', 31500)
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind(address)
while True:
data, addr = s.recvfrom(2048)
if not data:
print "client has exist"
break
print "received:", data, "from", addr
s.close()
UDPClient.py
import socket
address = ('127.0.0.1', 31500)
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
while True:
msg = raw_input()
if not msg:
break
s.sendto(msg, address)
s.close()