tcp udpのechoスクリプト
3581 ワード
============================================================
博文オリジナル、転載は出典を声明してください
電子コーヒー(元idブルー岩)
============================================================
tcpとudpの通信テストを行う際には、対応するテストスクリプトをサポートし、いくつか収集し、皆さんと共有する必要があります.
echo_tcp_server.h,tcpのechoプログラムは,tcp接続を確立した後,自分でどんなメッセージを送信するか,このプログラムは同じメッセージに返信する.gccコンパイル後に使用可能
echo_udp_server.py udpサーバ側のechoプログラムは、自分がどんなメッセージを送信するか、このプログラムは同じメッセージに返信します.
echo_udp_client.py udpクライアントechoプログラム.
添付の手順は以下の通りです.
echo_tcp_server.c
echo_udp_client.py
博文オリジナル、転載は出典を声明してください
電子コーヒー(元idブルー岩)
============================================================
tcpとudpの通信テストを行う際には、対応するテストスクリプトをサポートし、いくつか収集し、皆さんと共有する必要があります.
echo_tcp_server.h,tcpのechoプログラムは,tcp接続を確立した後,自分でどんなメッセージを送信するか,このプログラムは同じメッセージに返信する.gccコンパイル後に使用可能
echo_udp_server.py udpサーバ側のechoプログラムは、自分がどんなメッセージを送信するか、このプログラムは同じメッセージに返信します.
echo_udp_client.py udpクライアントechoプログラム.
添付の手順は以下の通りです.
echo_tcp_server.c
echo_tcp_server.c#include<stdio.h>
#include<unistd.h>
#include<sys/socket.h>
#include<arpa/inet.h>
#define LISTEN_PORT 5000
#define true 1
#define false 0
int listen_sock, comm_sock;
struct sockaddr_in serv_addr, clnt_addr;
int server_init();
int is_accept();
int handle_echo();
int main(void){
server_init();
while(1){
if(is_accept()){
handle_echo();
}
}
return 0;
}
int is_accept(){
int clnt_addr_len = sizeof(clnt_addr);
if((comm_sock = accept(listen_sock, (struct sockaddr *)&clnt_addr, &clnt_addr_len)) < 0){
return false;
}else{
printf("Client(IP:%s) connected.
", inet_ntoa(clnt_addr.sin_addr));
return true;
}
}
#define BUFFER_SIZE 32
int handle_echo(){
char buffer[BUFFER_SIZE];
int recv_len;
int goon = true;
while(goon){
if((recv_len = recv(comm_sock, buffer, BUFFER_SIZE, 0)) < 0){
perror("recv() error.");
exit(-1);
}else if(recv_len == 0){
goon = false;
}else{
if(send(comm_sock, buffer, recv_len, 0) != recv_len){
perror("send() error.");
exit(-1);
}
}
}
}
int server_init(){
// create listen socket
if((listen_sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0){
perror("listen_socket error.");
exit(-1);
}
// init the serv_addr
memset(&serv_addr, 0, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
serv_addr.sin_port = htons(LISTEN_PORT);
// bind listen socket with server address
if(bind(listen_sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0){
perror("bind() error.");
exit(-1);
}
// listen on the port
if(listen(listen_sock, 10) < 0){
perror("listen() error.");
exit(-1);
}
}
echo_udp_server.py #!/usr/bin/env python
"""
A simple echo server (UDP)
"""
import socket
# define servr properties
host = ''
port = 9003
size = 8192
# configure server socket
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind((host, port))
# wait for connections
# terminate with
try:
while True:
data, address = sock.recvfrom(size)
print "datagram from", address,data
#print "data is ",data
sock.sendto(data, address)
finally:
sock.close()
echo_udp_client.py
#!/usr/bin/env python
"""
A simple echo client (UDP)
"""
import socket
# configure the client
port = 9003
host = 'localhost'
size = 8192
timeout = 8
testMsg = "This is my //77text123"
# initialize socket
try:
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.settimeout(timeout)
sock.sendto(testMsg, (host, port))
response = sock.recv(8192)
sock.close()
print response
if response == testMsg:
print "connection is working fine."
else:
print "connection error occured."
except:
print "cannot reach your server"