socket通訊傳送結構體

2021-06-19 06:27:26 字數 3643 閱讀 1186

socket通訊可以直接傳送結構體!

示例:(傳送端)

[c-sharp]view plain

copy

struct

student  

;  struct

student student1=;  

接受端:

[c-sharp]view plain

copy

struct

student  

;  struct

student *student_client = null;  

while

(1)  

student_client = (struct

student *)recvline;  

//recvline[n] = 0; 

printf("receive:name=%s***age=%d/n"

,student_client->name,student_client->age);  

//fputs(recvline, stdout);

//printf("%s/n",recvline);

}  

udpsocket通訊簡單的**:

udpserv.c

[c-sharp]view plain

copy

/*udpserv.c*/

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#define maxline 100

#define serv_port 8888

intsockfd;  

struct

sockaddr_in servaddr, cliaddr;  

socklen_t len;  

struct

student  

;  struct

student student1=;  

void

get_msg()  

}  void

send_msg()  

}  intmain(

void

)    

//do_echo(sockfd, (struct sockaddr *)&cliaddr, sizeof(cliaddr));

pthread_create(&threadin,null,(void

*)(&get_msg),null);  

pthread_create(&threadout,null,(void

*)(&send_msg),null);  

pthread_join(threadin,&retval);  

pthread_join(threadout,&retval);  

return

0;  

}   

udpclient.c

[c-sharp]view plain

copy

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#define maxline 80

#define serv_port 8888

intsockfd;  

struct

sockaddr_in servaddr;  

struct

student  

;  void

get_msg()  

while

(1)  

student_client = (struct

student *)recvline;  

//recvline[n] = 0; 

printf("receive:name=%s***age=%d/n"

,student_client->name,student_client->age);  

//fputs(recvline, stdout);

//printf("%s/n",recvline);

}  }  

void

send_msg()  

}  intmain(

intargc, 

char

**argv)  

/* init servaddr */

bzero(&servaddr, sizeof

(servaddr));  

servaddr.sin_family = af_inet;  

servaddr.sin_port = htons(serv_port);  

/*用inet_pton判斷輸入的ip(存在argv[1]中)是否合法,並轉化格式*/

if(inet_pton(af_inet, argv[1], &servaddr.sin_addr) <= 0)  

sockfd = socket(af_inet, sock_dgram, 0);/*create a socket*/

//do_cli(stdin, sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr));

pthread_create(&threadin,null,(void

*)(&get_msg),null);  

pthread_create(&threadout,null,(void

*)(&send_msg),null);  

pthread_join(threadin,&retval);  

pthread_join(threadout,&retval);  

return

0;  

}  

分別編譯:

gcc -lpthread -o udpserv udpserv.c

gcc -lpthread -o udpclient udpclient.c

[                  

由於pthread庫不是linux系統預設的庫,連線時需要使用庫libpthread.a,所以在使用pthread_create建立執行緒時,在編譯中要                       加-lpthread引數:

gcc -o pthread  pthread.c   -lpthread

需要將鏈結庫 -lpthread放在最後面

] 服務端(ip:10.10.19.225)執行:

#./udpserv

客戶端執行:

#./udpclient 10.10.19.225

hello(輸入hello回車)

觀察兩端效果.

由於udp是不可靠的,非連線通訊,所以要先從客戶端發訊息。

socket傳送結構體

客套話不說了 socket中的send函式可以傳送字串,不能直接傳送結構體,自己理解 結構體即記憶體中一段連續的記憶體,這樣send中可以傳送結構體指標 上 功能 客戶端傳送給服務端乙個結構體,服務端返回客戶端一字串 客戶端 client.c include include include incl...

c c 通過socket傳送結構體

c c 通過socket傳送結構可以直接先將結構轉化到記憶體中,再通過send直接傳送。首先,我們建立乙個結構體。struct usrdata write cfg fd,para,sizeof hd4100 rec t hd4100 rec t是自定義的結構 close cfg fd printf ...

c c 通過socket傳送結構體

c c 通過socket傳送結構體 少游冰雪世界 c c 通過socket傳送結構可以直接先將結構轉化到記憶體中,再通過send直接傳送。首先,我們建立乙個結構體。struct usrdata write cfg fd,para,sizeof hd4100 rec t hd4100 rec t是自定...