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是自定...