socket编程(三)UDP cpp python

cpp实现

UDPServer.cpp

/************************************************************************************************
 *  File Name: UDPServer.cpp
 *  Author: hui
 *  Explain: this file is use to test udp sokect
 *  visit: http://www.jb51.net/article/53734.htm
 *
 *  Steps:
 *      socket
 *      bind
 *      sendto/recvfrom
 *      close
 ************************************************************************************************/


#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(){
    /** create a socket for server
     *  doamain : AF_INET means ipv4
     *  type    : SOCK_DGRAM , usually use with UDP
     *  protocol: 0 会自动选择type类型对应的默认协议
     * */
    int server_socket = socket(AF_INET, SOCK_DGRAM, 0);
    if(server_socket < 0){
        perror("create socket failed");
        return 1;
    }

    /** create an address for server socket to bind */
    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;
    }

    /** use dead loop to recieve data from client */
    while(1){
        /** create address var to record client's address */
        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

/************************************************************************************************
 *  File Name: UDPClient.cpp
 *  Author: hui
 *  Explain: this file is use to test udp sokect
 *  visit: http://www.jb51.net/article/53734.htm
 *
 *  Steps:
 *      socket
 *      sendto/recvfrom
 *      close
 ************************************************************************************************/

#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(){
    /** create a cleint socket */
    int client_socket = socket(AF_INET, SOCK_DGRAM, 0);
    if(client_socket < 0){
        perror("create socket failed");
        return 1;
    }

    /** create the server address to send data */
    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);

    //printf("%s:%d\n", inet_ntoa(server_addr.sin_addr), htons(server_addr.sin_port));

    /** send data to server */
    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()  

猜你喜欢

转载自blog.csdn.net/yinglang19941010/article/details/53292047
cpp