Socket UDP【簡單聊天例項】
阿新 • • 發佈:2018-12-24
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*/