【Linux c】关于socket的几段代码

第一组:TCP和UDP协议

server.c

/* receiver 
 * File:   receive.c
 */

#include <stdio.h>
#include <stdlib.h>

#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>

#include<unistd.h>
#include<fcntl.h>
#include<signal.h>
#include<sys/stat.h>


#define SERVER_PORT 5555
char send_buf[200] = {"Hi,I am sender!"}; //is the same with send_buf[] in send.c

int main(int argc, char** argv) {

	int key = 0;
	printf("\t\t 1--the UDP Socket\n\t\t 2--the TCP Socket\n\t\t Enter the number to choose:");
    scanf("%d",&key);
	
	while(key != 1 && key != 2) {
		printf("The number is error!\nEnter the number to again:");
		scanf("%d",&key);
	}
	
	int server_socket;
	char recv_buf[200];
	char send_buf[200] = {"Hi,I am serverqqqqqqqqqqqqq!"};
	struct sockaddr_in server_addr;
	int iDataNum;
	int server_addr_len;
	
	void initialize_socket () {		
		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);		
	    server_addr_len = sizeof(server_addr);
		return ;
	}	
	
	//check received and send is the same ?
	int check (char buf[]) {
		if (strcmp(buf, send_buf) == 0)	{
			return 0;
		}
		else  
			return 1;
	}
	
	switch(key) {
		case 1:	{
			printf("\nYou choose the UDP socket!\n");
			printf("Listening on port: %d\n", SERVER_PORT);
			
			//printf("server_addr.sin_port111111= %d \n", (int)server_addr.sin_port ); //1111
			
			//printf("server_socket11111= %d\n", server_socket);
			
			
			
			if((server_socket = socket(AF_INET,SOCK_DGRAM, 0)) < 0)	{
				perror("socket");
				return 1;
			}
			//printf("server_socket2222222= %d\n", server_socket);
			
			
			//printf("server_addr.sin_port22222= %d \n", (int)server_addr.sin_port );  //111111
			
			initialize_socket ();
			
		
			//printf("server_socket33333333= %d\n", server_socket);		
			
			//printf("server_addr.sin_port3333333= %d \n", (int)server_addr.sin_port );//2222222
			
			
			bind(server_socket, (struct sockaddr *)&server_addr, sizeof(server_addr));		
			
			//printf("server_socket4444444= %d\n", server_socket);
			
			
			//printf("server_addr.sin_port444444= %d \n", (int)server_addr.sin_port );//222222
			
			//printf(" server_addr.sin_addr11111111111111111111111=%s\n", inet_ntoa(server_addr.sin_addr));
			recvfrom(server_socket,recv_buf,sizeof(recv_buf),0,(struct sockaddr *)&server_addr,&server_addr_len);
			
			//printf("server_addr.sin_port555555= %d \n", (int)server_addr.sin_port ); //33333
			
			printf(" server_addr.sin_addr222222222222222222222=%s\n", inet_ntoa(server_addr.sin_addr));
			sendto(server_socket, send_buf, sizeof(send_buf), 0, (struct sockaddr *)&server_addr, sizeof(server_addr)); 
			
			//printf(" server_addr.sin_addr3333333333333333=%s\n", inet_ntoa(server_addr.sin_addr));
			//printf("server_addr.sin_port6666666= %d \n", (int)server_addr.sin_port );//33333
			
			
			//printf("server_socket55555= %d\n", server_socket);
			printf("send to client : %s \n",send_buf);		
			/*
			//check received and send
			if(check(recv_buf) == 0) {
				printf("Recv message is the same with the send\n");
			}
			else
				printf("Recv message is not same with the send\n");
			    break;
			*/
			
            /*			
			printf("wirte message to zaxiang device: \n");	
			 //sendto the driver device
			int fd;
			char c[200] = {0};

			fd = open("/dev/my_misc_dev",O_RDWR);
			printf("fd=%d\n",fd);
			if(fd!=-1){
				write(fd,recv_buf,(sizeof(recv_buf)-1));
				read(fd,c,(sizeof(recv_buf)-1));
				printf(" read from zaxiang device:c=%s\n",c);
			}
			else {
				printf("Device open failure\n");
			}
			close(fd);
			printf("Device open succeed!");
					
			
			*/
			close(server_socket);			
			break;
		}				
		case 2:	{
			printf("You choose the TCP socket!\n");

			struct sockaddr_in clientAddr;
			int addr_len = sizeof(clientAddr);
			int client;	
			
			if((server_socket = socket(AF_INET, SOCK_STREAM, 0)) < 0)	{
				perror("socket");
				return 1;
			}

			initialize_socket ();
			if(bind(server_socket, (struct sockaddr *)&server_addr, server_addr_len) < 0)	{
				perror("connect");
				return 1;
			}

			if(listen(server_socket, 5) < 0)	{
				perror("listen");
				return 1;
			}
			printf("Listening on port: %d\n", SERVER_PORT);
			
			client = accept(server_socket, (struct sockaddr*)&clientAddr, (socklen_t*)&addr_len);			
			if(client < 0)	  {
				perror("accept");
			}	
			
			iDataNum = recv(client, recv_buf, sizeof(recv_buf), 0);
			if(iDataNum < 0)	{
					perror("recv");
			}
			recv_buf[iDataNum] = '\0';			
			
			printf("Recv message : %s \n",recv_buf);
			
			//check received and send
			if(check(recv_buf) == 0) {
				printf("Recv message is the same with the send\n");
			}
			else
				printf("Recv message is not same with the send\n");
			
			close(server_socket);
			break;
		}
		default:
	       break;
	}

    return 0;
}

client.c

/* sender
 * File:   send.c
 */

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>


#define SERVER_IP "109.105.3.81"
#define SERVER_PORT 5555

int main(int argc, char** argv) {
	
	int key = 0;
	printf("\t\t 1--the UDP Socket\n\t\t 2--the TCP Socket\n\t\t Enter the number to choose:");
    scanf("%d",&key);
	
	while(key != 1 && key != 2) {
		printf("The number is error!\nEnter the number to again:");
		scanf("%d",&key);
	}
	
	int client_socket;
	struct sockaddr_in server_addr;
	char send_buf[200] = {"Hi,I am sender!wwwwwwwwwwwwwwww"};
	char recv_buf[200] = {0};
	int server_addr_len;
	
	void initialize_socket () {		
		bzero(&server_addr, sizeof(server_addr));
		server_addr.sin_family = AF_INET;
		server_addr.sin_port = htons(SERVER_PORT);
		server_addr.sin_addr.s_addr = inet_addr(SERVER_IP);
		server_addr_len = sizeof(server_addr);
		return ;
	}
	
	switch(key) {
		case 1:	{
			printf("\nYou choose the UDP socket!\n");
			
			//printf("server_socket111= %d\n", client_socket);
			
			
			printf("server_addr.sin_port111111= %d \n", (int)server_addr.sin_port );
			initialize_socket ();	
			
			printf("server_addr.sin_port222222= %d \n", (int)server_addr.sin_port );
			
			//printf("server_socket2222222= %d\n", client_socket);
			
			printf("server_addr.sin_port3333333333= %d \n", (int)server_addr.sin_port );
			if((client_socket = socket(AF_INET,SOCK_DGRAM, 0)) < 0)	{
					perror("socket");
					return 1;
			}
				
			//printf("server_socket33333= %d\n", client_socket);
			
			printf("server_addr.sin_port4444444444= %d \n", (int)server_addr.sin_port );
			
			printf(" server_addr.sin_addr111111111111111111111111111111=%s\n", inet_ntoa(server_addr.sin_addr));
			sendto(3, send_buf, sizeof(send_buf), 0, (struct sockaddr *)&server_addr, sizeof(server_addr)); 
			
			printf(" server_addr.sin_addr222222222222222222222=%s\n", inet_ntoa(server_addr.sin_addr));
			printf("server_addr.sin_port55555555= %d \n", (int)server_addr.sin_port );
			
			recvfrom(3,recv_buf,sizeof(recv_buf),0,(struct sockaddr *)&server_addr,&server_addr_len);
			
			printf(" server_addr.sin_addr333333333333333333333333333333=%s\n", inet_ntoa(server_addr.sin_addr));
			printf("server_addr.sin_port66666666= %d \n", (int)server_addr.sin_port );
			
			//printf("server_socket444444444= %d\n", client_socket);
			
			
			
			close(client_socket);
			printf("from server : %s \n",recv_buf);
			break;
		}				
		case 2:	{
			printf("\nYou choose the TCP socket!\n");
			
			initialize_socket ();
			if((client_socket = socket(AF_INET, SOCK_STREAM, 0)) < 0)	{
				perror("socket");
				return 1;
			}
			
			if(connect(client_socket, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0)	{
				perror("connect");
				return 1;
			}

			send(client_socket, send_buf, sizeof(send_buf), 0);			

			close(client_socket);
			printf("Send message : %s \n",send_buf);
			break;
		}
		default :		   
			break;
				
	}	


    return 0;
}

第二组:TCP 协议

server.c

/*server*/
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
#include <netdb.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>

#define SERVER_PORT 5555

int main()
{
	int serverSocket;
	struct sockaddr_in server_addr;
	struct sockaddr_in clientAddr;
	int addr_len = sizeof(clientAddr);
	int client;
	char buffer[200];
	int iDataNum;

	if((serverSocket = socket(AF_INET, SOCK_STREAM, 0)) < 0)
	{
		perror("socket");
		return 1;
	}

	bzero(&server_addr, sizeof(server_addr));
	server_addr.sin_family = AF_INET;
	server_addr.sin_port = htons(SERVER_PORT);
	server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
	if(bind(serverSocket, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0)
	{
		perror("connect");
		return 1;
	}

	if(listen(serverSocket, 5) < 0) 
	{
		perror("listen");
		return 1;
	}

	printf("Listening on port: %d\n", SERVER_PORT);
	client = accept(serverSocket, (struct sockaddr*)&clientAddr, (socklen_t*)&addr_len);
	if(client < 0)
		{
			perror("accept");
		}
	printf("\nrecv client data...");
	printf("IP is :%s\t", inet_ntoa(clientAddr.sin_addr));
	printf("Port is :%d\n", htons(clientAddr.sin_port));
	
	iDataNum = recv(client, buffer, 1024, 0);
	if(iDataNum < 0)
		{
			perror("recv");
		}
	buffer[iDataNum] = '\0';
		
	printf("recv data is %s\n",buffer);

	close(serverSocket);
	printf("close the connection\n");	

	return 0;
}

clent.c

/*client*/
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
#include <netdb.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>

#define CLIENT_IP "127.0.0.1"
#define SERVER_PORT 5555

int main()
{
	int clientSocket;
	struct sockaddr_in serverAddr;
	char sendbuf[200] = {"Hi,I am sender!\n"};
	
	int iDataNum;
	if((clientSocket = socket(AF_INET, SOCK_STREAM, 0)) < 0)
	{
		perror("socket");
		return 1;
	}

	serverAddr.sin_family = AF_INET;
	serverAddr.sin_port = htons(SERVER_PORT);
	serverAddr.sin_addr.s_addr = inet_addr(CLIENT_IP);
	if(connect(clientSocket, (struct sockaddr *)&serverAddr, sizeof(serverAddr)) < 0)
	{
		perror("connect");
		return 1;
	}

	printf("connect with destination host...\n");

    send(clientSocket, sendbuf, strlen(sendbuf), 0);
	
	printf("Messages Sent,terminating\n");

	close(clientSocket);
	return 0;
}

第三组:UDP 

server.c

/* receiver 
 * File:   receive.c
 */

#include <stdio.h>
#include <stdlib.h>

#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>

#define TS_IP "127.0.0.1"
#define port 5555

int main(int argc, char** argv) {

    int sin_len;
    char message[256];
    char copy[256];
	int ret;
	int i;
    int server_socket;
    struct sockaddr_in sin;
	char a[20] = {0};

    bzero(&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);

    server_socket=socket(AF_INET,SOCK_DGRAM,0);
    bind(server_socket,(struct sockaddr *)&sin,sizeof(sin));
   
	while(1){
	    
		printf("Waiting for data form sender \n\n");
		
		printf(" inet_ntoa(sin.sin_addr) = %s\n", inet_ntoa(sin.sin_addr));
		printf(" sin.sin_port = %d\n", htons(sin.sin_port));
		
		ret = recvfrom(server_socket,message,sizeof(message),0,(struct sockaddr *)&sin,&sin_len);
		
		printf(" \n\ninet_ntoa(sin.sin_addr) = %s\n", inet_ntoa(sin.sin_addr));
		printf(" sin.sin_port = %d\n\n\n\n\n", htons(sin.sin_port));
		
		
		
		
		//strcpy(a, inet_ntoa(sin.sin_addr));
		if(strcmp(inet_ntoa(sin.sin_addr), TS_IP) == 0 ){
			
			printf(" 可以进行比较!\n\n\n\n");
		}
		
		printf("Response [%d] from server:\n", ret);
		//printf("strlen(message) [%d] :\n", strlen(message));
		
		for(i = 0; i < ret; i++){
			
			printf("%x \t", message[i]);
		}
		
		//strcpy(message, "");
		//memcpy(message, NULL, ret);
		memset(message, 0, ret);
		for(i = 0; i < ret; i++){
			
			printf("%x \t", message[i]);
		}		
		
		printf("strlen(message) [%d] :\n", strlen(message));
		
		
		
		//printf("%x \t %x \t %x \t %x \t \n", message[0], message[1], message[2], message[3] );
	   
	   // strcpy(copy, message); memcpy( , , ret);
	    memcpy(copy, message, ret);
		
	   	printf("\n strlen(copy) [%d] :\n", strlen(copy));
		
		for(i = 0; i < ret; i++){
			
			printf("%x \t", copy[i]);
		}
		
		printf("\n");
	   
   }


    close(server_socket);
	printf("Close the connection!\n");
    exit(0);

    return (EXIT_SUCCESS);
}

clent.c 

/* sender
 * File:   send.c
 */

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>

#define SERVER_IP "127.0.0.1"
#define port 5555
#define UE_PORT 6666

int main(int argc, char** argv) {
    int client_socket;
    //char buf[80] = {0x03, 0x01, 0x00, 0x04};
	char buf[80] = "abcd";
    struct sockaddr_in serverAddr, addr_me;

	//initialize
    bzero(&serverAddr,sizeof(serverAddr));
    serverAddr.sin_family=AF_INET; 
    serverAddr.sin_addr.s_addr=inet_addr(SERVER_IP);
    serverAddr.sin_port=htons(port);

    //create a UDP socket
    client_socket=socket(AF_INET,SOCK_DGRAM,0);
	
		//bind UE port
	bzero(&addr_me, sizeof(addr_me));
	addr_me.sin_family = AF_INET;
	addr_me.sin_port = htons(UE_PORT);      
	addr_me.sin_addr.s_addr = htonl(INADDR_ANY);
	
	bind(client_socket, (struct sockaddr *)&addr_me, sizeof(addr_me));
	
    //sprintf(buf,"Hi,I am sender111111111111!\n");    
    sendto(client_socket,buf,4,0,(struct sockaddr *)&serverAddr,sizeof(serverAddr)); 
    
    close(client_socket);
    printf("Messages Sent,terminating\n");

    exit(0);

    return (EXIT_SUCCESS);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值