Linux Socket网络通信示例
記錄一下Linux 網(wǎng)絡(luò)通信編程示例,主要用內(nèi)網(wǎng)穿透和網(wǎng)絡(luò)調(diào)試助手進(jìn)行調(diào)試。
1、源文件:
#include <stdlib.h> #include <sys/types.h> #include <stdio.h> #include <netinet/in.h> #incldue <string.h> //bzero #include <arpa/inet.h> //inet_addr#define MSG printfint main() {int recbytes;int sin_size;char buffer[1024] = {0};struct sockaddr_in s_add,c_add;MSG("INFO: socket thread...\r\n");sock_id = socket(AF_INET,SOCK_STREAM,0);if(-1 == sock_id){MSG("INFO: socket fail !\r\n");return -1;}MSG("INFO: socket success !\r\n");bzero(&s_add,sizeof(struct sockaddr_in));s_add.sin_family = AF_INET;s_add.sin_addr.s_addr = inet_addr("94.191.70.63");//上述IP地址是我的服務(wù)器IP,可以用花生殼,NAT123等內(nèi)網(wǎng)穿透軟件s_add.sin_port = htons(18677);//設(shè)置的服務(wù)器端口//connect to serv with block modeif(-1 == connect(sock_id,(struct sockaddr*)(&s_add),sizeof(struct sockaddr))){MSG("INFO: connect to serv fail !\r\n");return -1;}MSG("INFO: connect to serv success \r\n");while (1) {if(-1 != (recbytes = read(sock_id,buffer,1024))){buffer[recbytes] = '\0';MSG("INFO:Rx serv data:%s\r\n",buffer);memset(buffer,0,1024);}if(fgets( buffer, 1024, stdin ) != NULL){write( sock_id, buffer, strlen(buffer));}} }2、編譯運(yùn)行
gcc socket_linux.c -o main服務(wù)器接收和發(fā)送:
linux發(fā)送和接收:
3、內(nèi)網(wǎng)穿透是怎么一回事?
linux編寫的socket網(wǎng)絡(luò)通信程序需要訪問IP和端口,這個(gè)IP和端口一定是公網(wǎng)、外網(wǎng),不是局域網(wǎng)的192.168.1.X這種,因此在調(diào)試網(wǎng)絡(luò)通信代碼,測試數(shù)據(jù)發(fā)送時(shí)需要有公網(wǎng)IP作為服務(wù)器,接收我們程序發(fā)起的連接。
簡單來說有兩種方式構(gòu)建服務(wù)器,1:購買阿里云、騰訊云、華為云等服務(wù)器,自己開服務(wù),開端口和防火墻設(shè)置,并運(yùn)行相應(yīng)服務(wù)器代碼,接收開發(fā)的socket連接并執(zhí)行相應(yīng)響應(yīng)。2:內(nèi)網(wǎng)穿透,不用搭建服務(wù)器,自己電腦安裝一個(gè)內(nèi)網(wǎng)穿透軟件,由該軟件提供一個(gè)外部公網(wǎng)IP,然后自己電腦再創(chuàng)建一個(gè)服務(wù)器,用普通的網(wǎng)絡(luò)調(diào)試軟件即可。
內(nèi)網(wǎng)穿透怎么配置:首先在電腦打開網(wǎng)絡(luò)調(diào)試助手,創(chuàng)建一個(gè)服務(wù)器,設(shè)置服務(wù)器端口為PORT1;接著打開內(nèi)網(wǎng)穿透軟件,創(chuàng)建一個(gè)公網(wǎng)服務(wù)(具有公網(wǎng)網(wǎng)址和公網(wǎng)端口PORT2),并綁定電腦的IP地址(用ADDR1表示,可以上網(wǎng)的地址)和PORT1端口;然后將內(nèi)網(wǎng)穿透軟件的外網(wǎng)服務(wù)網(wǎng)址找出來,轉(zhuǎn)換成IP地址(用ADDR2表示);最后在程序中用ADDR2和PORT2這個(gè)IP和端口來對接,所有收發(fā)數(shù)據(jù)都可以傳輸?shù)诫娔X的網(wǎng)絡(luò)調(diào)試助手中。
?
?
?
總結(jié)
以上是生活随笔為你收集整理的Linux Socket网络通信示例的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 从SEO的角度,如何打造非专业领域内容?
- 下一篇: 引擎提示Alias HeroDB跟游戏引