Linux下TCP網路程式設計流程
常見的兩種模型:C/S模型:(客戶端/伺服器端)和ptp(點對點)模型。
下面為TCP網路流程程式設計兩臺主機之間資料傳送的具體程式碼示例。
程式碼示例:
檔案server.c
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <unistd.h>
#include <string.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <arpa/inet.h>
void main()
{
//建立socket
int sock=socket(PF_INET,SOCK_STREAM,0);//第一個引數告訴系統使用哪個底層協議族,對於tcp協議來說,一般設定為PF—INET表示IPv4,PF—INET6表示IPv6;第二個參數列示服務型別為流服務,第三個參數列示預設協議,一般為0;
assert(sock!=-1);
struct sockaddr_in ser,cli;//ser服務端,cli客戶端
memset(&ser,0,sizeof(&ser));
ser.sin_family= AF_INET;//地址族
ser.sin_port=htons(6500);//埠號(使用者向網路,以short型別)
ser.sin_addr.s_addr=inet_addr("127.0.0.1");//IP地址
//繫結socket
int res=bind(sock,(struct sockaddr*)&ser,sizeof(ser));
assert(res!=-1);
//監聽socket
listen(sock,5);
while(1)
{
int len=sizeof(cli);
//接收連線
int c=accept(sock,(struct sockaddr*)&cli,&len);
assert(c!=-1);
printf("one client link\n");
//接收資料
while(1)
{
char buff[128]={0};
int n=recv(c,buff,127,0);
if(n<=0)
{
printf("client link break\n");
break;
}
printf("buff:%s,n=%d\n",buff,n);
//傳送資料
send(c,"OK",2,0);//第二個和第三個引數分別指寫緩衝區位置和大小
}
close(c);
}
//關閉
close(sock);
}
檔案cli.c
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <unistd.h>
#include <string.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <arpa/inet.h>
void main()
{
//建立socket
int sock=socket(PF_INET,SOCK_STREAM,0);//第一個引數告訴系統使用哪個底層協議族,對於tcp協議來說,一般設定為PF—INET表示IPv4,PF—INET6表示IPv6;第二個參數列示服務型別為流服務,第三個參數列示預設協議,一般為0;
assert(sock!=-1);
struct sockaddr_in ser,cli;//ser服務端,cli客戶端
ser.sin_family = AF_INET;//地址族
ser.sin_port=htons(6500);//埠號(使用者向網路,以short型別)
ser.sin_addr.s_addr=inet_addr("127.0.0.1");//IP地址
//發起socket
int res= connect(sock,(struct sockaddr*)&ser,sizeof(ser));//第二個引數指定連結的是伺服器上哪個程式
assert(res!=-1);
while(1)
{
printf("please input: "),fflush(stdout);
char buff[128]={0};
fgets(buff,128,stdin);
buff[strlen(buff)-1]=0;
if(strncmp(buff,"end",3)==0)
{
break;
}
//傳送資料
send(sock,buff,strlen(buff),0);
memset(buff,0,128);//清空
//接收資料
recv(sock,buff,127,0);
printf("%s\n",buff);
}
//關閉
close(sock);
}
列印結果:
編譯gcc -o server server.c成功
再執行./server成功;
再開啟一個終端,
編譯gcc -o client client.c成功
再執行./client;
執行結果如下:
在client埠:
please input:hello
OK
please input:word
OK
please input:end
執行完,退出。
在server埠:
one client link
buff:hello,n=5
buff:word,n=4
client link break
相關文章
- UDP&TCP Linux網路應用程式設計詳解UDPTCPLinux程式設計
- linux下TCP socket程式設計初步(1)LinuxTCP程式設計
- Linux網路程式設計--初等網路函式介紹(TCP)(轉)Linux程式設計函式TCP
- python網路-Socket之TCP程式設計(26)PythonTCP程式設計
- JAVA網路程式設計(2)TCP程式設計Java程式設計TCP
- Linux網路程式設計--TCP/IP協議(轉)Linux程式設計TCP協議
- 【網路程式設計】Tcp/Udp程式設計TCPUDP
- Linux Socket C語言網路程式設計:TCP SocketLinuxC語言程式設計TCP
- 網路遊戲程式設計師須知 UDP vs TCP(轉)遊戲程式設計師UDPTCP
- TCP/IP網路程式設計模型TCP程式設計模型
- Python 網路資料傳輸協議 TCP 程式設計Python協議TCP程式設計
- 網路程式設計TCP/IP詳解程式設計TCP
- java網路程式設計(TCP詳解)Java程式設計TCP
- 網路程式設計中TCP與UDP程式設計TCPUDP
- 理解 TCP(六):網路程式設計介面TCP程式設計
- TCP程式設計(七)TCP程式設計
- Linux環境下的網路程式設計Linux程式設計
- linux c網路網路程式設計面試題收集Linux程式設計面試題
- 《Linux網路開發必學教程》6_Window 下的網路程式設計Linux程式設計
- 《Unix 網路程式設計》05:TCP C/S 程式示例程式設計TCP
- linux網路知識:TCP/IP設定內容(轉)LinuxTCP
- Linux網路程式設計(2)——採用TCP的基本server的實現Linux程式設計TCPServer
- (轉)Linux下 C++呼叫C 實現socket網路通訊程式設計LinuxC++程式設計
- Go語言中的TCP/IP網路程式設計GoTCP程式設計
- Socket、TCP/IP、HTTP、FTP及網路程式設計TCPHTTPFTP程式設計
- Linux TCP程式設計常見問題考慮LinuxTCP程式設計
- Linux系統程式設計(33)—— socket程式設計之TCP程式的錯誤處理Linux程式設計TCP
- Linux網路程式設計之socket簡單通訊TCP--服務端程式碼Linux程式設計TCP服務端
- linux下bluetooth程式設計(三)HCI層程式設計Linux程式設計
- linux下bluetooth程式設計(八)SDP層程式設計Linux程式設計
- java多執行緒實現TCP網路Socket程式設計(C/S通訊)Java執行緒TCP程式設計
- Java:基於TCP協議網路socket程式設計(實現C/S通訊)JavaTCP協議程式設計
- 網路通訊程式設計程式設計
- 網路協程程式設計程式設計
- Socket 程式設計 (網路篇)程式設計
- Java 網路程式設計 – TCP協議基本步驟Java程式設計TCP協議
- Socket程式設計,從TCP分析到建立web網站程式設計TCPWeb網站
- 基於TCP協議的Socket網路程式設計( )TCP協議程式設計