zoukankan      html  css  js  c++  java
  • UNIX Socket UDP 代码

    客户端

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    #include <sys/types.h>
    #include <netinet/in.h>
    #include <sys/socket.h>
    #include <arpa/inet.h>
    #include <unistd.h>
    
    // UDP 通讯程序代码-Client
    
    int main(int argc, char* argv[])
    {
    	if (argc < 2)
    	{
    		printf("Please input something!\r\n");
    		exit(1);
    	}
    
    	
    	// 因为是UDP套接字,使用SOCK_DGRAM,而不是SOCK_STREAM
    	int sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP/*TCP使用0*/);
    	if (sock < 0)
    	{
    		printf("创建套接字失败!\r\n");
    		exit(1);
    	}
    
    	// Send to
    	struct sockaddr_in toAddr;
    	memset(&toAddr, 0, sizeof(toAddr));
    	toAddr.sin_family = AF_INET;
    	toAddr.sin_addr.s_addr = inet_addr("127.0.0.1");
    	toAddr.sin_port = htons(4000);
    
    	// Start to send to
    	if (sendto(sock, argv[1], strlen(argv[1]), 0, (struct sockaddr*)&toAddr, sizeof(toAddr)) != strlen(argv[1]))
    	{
    		printf("sendto()函数使用失败!,\r\n");
    		close(sock);
    		exit(1);
    	}
    
    	// Receive form
    	struct sockaddr_in fromAddr;
    	char recvBuffer[128] = {0};
    	unsigned int fromLen = sizeof(fromAddr);
    	
    	if( recvfrom(sock, recvBuffer, 128, 0, (struct sockaddr*)&fromAddr, &fromLen) < 0)
    	{
    		printf("recvfrom()函数使用失败!,\r\n");
    		close(sock);
    		exit(1);
    	}
    
    	// 把接收的数据输出到屏幕上
    	printf("recvfrom()result: %s\r\n", recvBuffer);
    	close(sock);
    	return 0;
    }

    服务端

    // UDP Server
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    #include <sys/types.h>
    #include <netinet/in.h>
    #include <sys/socket.h>
    #include <arpa/inet.h>
    #include <unistd.h>
    
    int main()
    {
    
    	// Create UDP socket
    	int sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
    	
    	if (sock < 0)
    	{
    		printf("Create socket faild\r\n");
    		exit(1);
    	}
    
    	// Bind socket and the client of send link request
    	struct sockaddr_in fromAddr;
    	memset(&fromAddr, 0, sizeof(fromAddr));
    	fromAddr.sin_family = AF_INET;
    	fromAddr.sin_addr.s_addr = htonl(INADDR_ANY);
    	fromAddr.sin_port = htons(4000);
    	
    	if (bind(sock, (struct sockaddr*)&fromAddr, sizeof(fromAddr)) < 0)
    	{
    		printf("Bind socket faild!\r\n");
    		close(sock);
    		exit(1);
    	}
    	
    	struct sockaddr_in toAddr;
    	char recvBuffer[128] = {0};
    	int recvLen = -1;
    	unsigned int addrLen = sizeof(toAddr);
    	
    	while(1)
    	{
    		if ((recvLen = recvfrom(sock, recvBuffer, 128, 0, (struct sockaddr*)&toAddr, &addrLen)) < 0)
    		{
    			printf("Receive message faild!\r\n");
    			close(sock);
    			exit(1);
    		}
    		
    		if (recvLen > 0)
    		{
    			printf("Recive message:%s\r\n", recvBuffer);
    		}
    
    		if (sendto(sock, recvBuffer, recvLen, 0, (struct sockaddr*)&toAddr, sizeof(toAddr)) != recvLen)
    		{
    			printf("sendto faild\r\n");
    			close(sock);
    			exit(1);
    		}
    	}
    	
    	close(sock);
    	return 0;
    }
    
    
    
    
    
    
    
    
    



  • 相关阅读:
    UVa 820 因特网带宽(最大流)
    UVa 1001 奶酪里的老鼠(Dijkstra或Floyd)
    UVa 821 网页跳跃(Floyd)
    UVa 11624 大火蔓延的迷宫
    UVa 10881 蚂蚁
    UVa 11300 分金币
    UVa 11729 突击战
    《额尔古纳河右岸》读书笔记
    HDU 1083 Courses(二分图匹配模板)
    UVa 10618 跳舞机
  • 原文地址:https://www.cnblogs.com/iapp/p/3631843.html
Copyright © 2011-2022 走看看