Socket UDP【简单聊天实例】

来源:互联网 发布:网络歌老情歌经典大全 编辑:程序博客网 时间:2024/06/10 06:41

server和client写在一起,双向通信。

#include <stdio.h>#include <stdlib.h>#include <string.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <pthread.h>#include <unistd.h>using namespace std;#define MAXDATASIZE 1024#define IP "127.0.0.1"int send_head_port;int send_tail_port;int recv_tail_port;pthread_t rec_head_thread, rec_tail_thread, send_tail_thread;char my_ip[16];char server_head_ip[16];char server_tail_ip[16];void init_client();void *send_head_server(void *args);void *recv_tail_server(void *args);void *send_head_server(void *args){    int sockfd;    struct sockaddr_in sin_addr;    bzero(&sin_addr, sizeof(sin_addr));    sin_addr.sin_family = AF_INET;    sin_addr.sin_addr.s_addr = inet_addr("127.0.0.1");    sin_addr.sin_port = htons(send_tail_port);    int sin_len = sizeof(sin_addr);    if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0)    {        printf("Error opening socket\n");        exit(1);    }    while (1)    {        char msg[MAXDATASIZE];        scanf("%s", &msg);        sendto(sockfd, msg, MAXDATASIZE, 0, (struct sockaddr *)&sin_addr, sin_len);    }}void *recv_tail_server(void *args){    printf("rrrr\n");    int sockfd;    char buft[MAXDATASIZE];    struct sockaddr_in cli_addr;    bzero(&cli_addr, sizeof(cli_addr));    cli_addr.sin_family = AF_INET;    cli_addr.sin_addr.s_addr = inet_addr("127.0.0.1");    cli_addr.sin_port = htons(recv_tail_port);    socklen_t cli_len = sizeof(cli_addr);    if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0)    {        printf("error opening socket\n");        exit(1);    }    if (bind(sockfd, (struct sockaddr *)&cli_addr, sizeof(cli_addr)) == -1)    {        printf("error in bind\n");        exit(1);    }    while (1)    {        if (recvfrom(sockfd, buft, MAXDATASIZE, 0, (struct sockaddr *)&cli_addr, &cli_len) > 0)                printf("RECV: %s\n", buft );    }}void init_client(){}int main(int argc, char *argv[])//recv_tail_port, send_tail_port{    if (argc < 3)    {        fprintf(stderr, "lack port\n");        exit(1);    }    recv_tail_port = atoi(argv[1]);    send_tail_port = atoi(argv[2]);    pthread_create(&rec_tail_thread, NULL, send_head_server, NULL);    pthread_create(&send_tail_thread, NULL, recv_tail_server, NULL);    pthread_join(rec_tail_thread, NULL);    pthread_join(send_tail_thread, NULL);    return 0;}/*main*/


0 0