The structure can be directly transmitted through socket communication!
Example:
(Sender)
Struct student <br/>{< br/> char name [20]; <br/> int age; <br/> }; <br/> struct student student1 = {"liuxiaobing", 23 };
Receiver:
Struct student <br/>{< br/> char name [20]; <br/> int age; <br/> }; <br/> struct student * student_client = NULL; <br/> while (1) <br/>{< br/> N = read (sockfd, recvline, maxline ); <br/> If (n =-1) <br/>{< br/> perror ("read error"); <br/> exit (1 ); <br/>}< br/> student_client = (struct student *) recvline; <br/> // recvline [N] = 0; <br/> printf ("receive: name = % s *** age = % d/N ", student_client-> name, student_client-> age); <br/> // fputs (recvline, stdout ); <br/> // printf ("% s/n", recvline); <br/>}
Simple code for udpsocket communication:
Udpserv. c
/* Udpserv. C */<br/> # include <sys/types. h> <br/> # include <sys/socket. h> <br/> # include <string. h> <br/> # include <netinet/in. h> <br/> # include <stdio. h> <br/> # include <stdlib. h> <br/> # include <stddef. h> <br/> # include <unistd. h> <br/> # include <pthread. h> <br/> # define maxline 100 <br/> # define serv_port 8888 <br/> int sockfd; <br/> struct sockaddr_in servaddr, cliaddr; <br/> socklen_t Len; <br/> struct studen T <br/>{< br/> char name [20]; <br/> int age; <br/> }; <br/> struct student student1 = {"liuxiaobing", 23 }; <br/> void get_msg () <br/>{< br/> int N; <br/> // socklen_t Len; <br/> char mesg [maxline]; </P> <p> while (1) <br/>{< br/> memset (mesg, 0, maxline); <br/> Len = sizeof (cliaddr) + 1; <br/> // waiting for receive data <br/> N = recvfrom (sockfd, mesg, maxline, 0, (struct sockaddr *) & cliaddr, & Len ); <br/> printf ("peer: % s/n ", Mesg); <br/> // printf (" n = % d/N ", N ); <br/> // sent data back to client <br/> // sendto (sockfd, mesg, N, 0, (struct sockaddr *) & cliaddr, Len ); <br/>}< br/> void send_msg () <br/>{< br/> int N; <br/> char sendline [maxline]; <br/> // while (fgets (sendline, maxline, stdin )! = NULL) <br/> while (1) <br/>{< br/> // printf ("% s/n", sendline ); <br/> N = strlen (sendline); <br/> // printf ("n = % d/N", n); <br/> sendto (sockfd, (void *) & student1, sizeof (student1), 0, <br/> (struct sockaddr *) & cliaddr, Len); <br/> sleep (1 ); <br/>}< br/> int main (void) <br/>{< br/> pthread_t threadin, threadout; <br/> void * retval; <br/> printf ("% s/n % d/N", student1.name, student1.age); <br/> sockfd = socket (af_inet, sock_dgram, 0);/* Create a socket */<br/>/* init servaddr */<br/> bzero (& servaddr, sizeof (servaddr )); <br/> servaddr. sin_family = af_inet; <br/> servaddr. sin_addr.s_addr = htonl (inaddr_any); <br/> servaddr. sin_port = htons (serv_port); <br/>/* bind address and port to socket */<br/> If (BIND (sockfd, (struct sockaddr *) & servaddr, sizeof (servaddr) =-1) <br/>{< br/> perror ("BIND error"); <br/> exit (1 ); <br/>}</P> <p> // do_echo (sockfd, (struct sockaddr *) & cliaddr, sizeof (cliaddr )); <br/> pthread_create (& threadin, null, (void *) (& get_msg), null); <br/> pthread_create (& threadout, null, (void *) (& send_msg), null); </P> <p> pthread_join (threadin, & retval); <br/> pthread_join (threadout, & retval ); <br/> return 0; <br/>}
Udpclient. c
# Include <sys/types. h> <br/> # include <sys/socket. h> <br/> # include <string. h> <br/> # include <netinet/in. h> <br/> # include <stdio. h> <br/> # include <stdlib. h> <br/> # include <ARPA/inet. h> <br/> # include <stddef. h> <br/> # include <unistd. h> <br/> # include <pthread. h> <br/> # define maxline 80 <br/> # define serv_port 8888 <br/> int sockfd; <br/> struct sockaddr_in servaddr; <br/> struct student <br/> {<br/> char na Me [20]; <br/> int age; <br/>}; <br/> void get_msg () <br/>{< br/> int N; <br/> char sendline [maxline], recvline [maxline + 1]; <br/> struct student * student_client = NULL; <br/> socklen_t servlen; <br/> servlen = sizeof (servaddr) + 1; <br/> If (connect (sockfd, (struct sockaddr *) & servaddr, servlen) =-1) <br/>{< br/> perror ("Connect error"); <br/> exit (1); <br/>}< br/> while (1) <br/> {<br/> N = read (sockfd, recvl INE, maxline); <br/> If (n =-1) <br/>{< br/> perror ("read error "); <br/> exit (1); <br/>}< br/> student_client = (struct student *) recvline; <br/> // recvline [N] = 0; <br/> printf ("receive: Name = % s *** age = % d/N", student_client-> name, student_client-> age ); <br/> // fputs (recvline, stdout); <br/> // printf ("% s/n", recvline ); <br/>}< br/> void send_msg () <br/>{< br/> char sendline [maxline]; <br/> while (fgets (Sen Dline, maxline, stdin )! = NULL) <br/>{< br/> write (sockfd, sendline, strlen (sendline )); <br/>}< br/> int main (INT argc, char ** argv) <br/>{< br/> pthread_t threadin, threadout; <br/> void * retval; </P> <p>/* Check ARGs */<br/> If (argc! = 2) <br/>{< br/> printf ("Usage: udpclient <IPaddress>/N"); <br/> exit (1 ); <br/>}< br/>/* init servaddr */<br/> bzero (& servaddr, sizeof (servaddr); <br/> servaddr. sin_family = af_inet; <br/> servaddr. sin_port = htons (serv_port); </P> <p>/* use inet_pton to determine whether the input IP address (in argv [1]) is valid, and convert the format */<br/> If (inet_ton (af_inet, argv [1], & servaddr. sin_addr) <= 0) <br/> {<br/> printf ("[% s] is not a valid IPaddress/N", argv [1]); <br/> exit (1); <br/>}< br/> sockfd = socket (af_inet, sock_dgram, 0 ); /* Create a socket */<br/> // do_cli (stdin, sockfd, (struct sockaddr *) & servaddr, sizeof (servaddr )); <br/> pthread_create (& threadin, null, (void *) (& get_msg), null); <br/> pthread_create (& threadout, null, (void *) (& send_msg), null); </P> <p> pthread_join (threadin, & retval); <br/> pthread_join (threadout, & retval ); <br/> return 0; <br/>}< br/>
Compile separately:
Gcc-l pthread-O udpserv. c
Gcc-l pthread-O udpclient. c
Server (IP: 10.10.19.225) run:
#./Udpserv
Client running:
#./Udpclient 10.10.19.225
Hello (enter Hello press Enter)
Observe the effect on both ends.
Because UDP is unreliable and non-connected, messages must be sent from the client first.