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_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"