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程式設計
- python網路-Socket之TCP程式設計(26)PythonTCP程式設計
- Linux Socket C語言網路程式設計:TCP SocketLinuxC語言程式設計TCP
- JAVA網路程式設計(2)TCP程式設計Java程式設計TCP
- 【網路程式設計】Tcp/Udp程式設計TCPUDP
- Java 網路程式設計(TCP程式設計 和 UDP程式設計)Java程式設計TCPUDP
- Python 網路資料傳輸協議 TCP 程式設計Python協議TCP程式設計
- 《Linux網路開發必學教程》6_Window 下的網路程式設計Linux程式設計
- 網路程式設計中TCP與UDP程式設計TCPUDP
- java網路程式設計(TCP詳解)Java程式設計TCP
- 網路程式設計TCP/IP詳解程式設計TCP
- 【Linux】 Linux網路程式設計Linux程式設計
- linux c網路網路程式設計面試題收集Linux程式設計面試題
- Linux學習/TCP程式設計學習筆記LinuxTCP程式設計筆記
- 《Unix 網路程式設計》05:TCP C/S 程式示例程式設計TCP
- 【Linux網路程式設計】網路程式設計常見概念Linux程式設計
- (整合)Linux下的多程式程式設計Linux程式設計
- [計算機網路]TCP/IP計算機網路TCP
- Go語言中的TCP/IP網路程式設計GoTCP程式設計
- Linux網路程式設計(2)Linux程式設計
- Linux網路程式設計(1)Linux程式設計
- 《Linux網路開發必學教程》12_TCP通訊框架:服務端設計LinuxTCP框架服務端
- Java:基於TCP協議網路socket程式設計(實現C/S通訊)JavaTCP協議程式設計
- java多執行緒實現TCP網路Socket程式設計(C/S通訊)Java執行緒TCP程式設計
- 網路通訊程式設計程式設計
- py網路工具程式設計程式設計
- linux下使用makefile方式程式設計主程式Linux程式設計
- 基於TCP協議的Socket網路程式設計( )TCP協議程式設計
- Java 網路程式設計 – TCP協議基本步驟Java程式設計TCP協議
- Socket程式設計,從TCP分析到建立web網站程式設計TCPWeb網站
- 第五講 TCP程式設計TCP程式設計
- python 網路篇(網路程式設計)Python程式設計
- 在Linux下使用TCP封裝器來加強網路服務安全LinuxTCP封裝
- 一個老程式設計師在網際網路寒冬下的感悟程式設計師
- Python網路程式設計實現TCP和UDP連線Python程式設計TCPUDP
- JAVASE網路程式設計之TCP實現聊天通訊Java程式設計TCP
- 計算機網路再次整理————tcp[二]計算機網路TCP
- Linux 高效能伺服器程式設計- TCP 協議詳解Linux伺服器程式設計TCP協議
- Linux 高效能伺服器程式設計-TCP/IP 協議族Linux伺服器程式設計TCP協議