TCP套接字程式設計

2021-08-18 16:07:40 字數 3897 閱讀 3366

對於socket不理解的可以檢視:c語言通過socket程式設計實現tcp通訊,linux socket程式設計/socket詳解

先看看程式效果圖

提示如果伺服器,直接通過ctrl+z關閉,這樣程式占用的位址不會釋放,需要以下操作

1.ps    //檢視程序

2.kill -9 程式pid    //強制殺死程序

服務端:

客戶端:

接下來是**

服務端:

#include #include //包含套接字的函式庫

#include //包含af_inet的相關結構

#include //包含af_inet的操作函式

#include #include #include #include /*

監聽後,一直處於accept阻塞狀態, 直到有客戶端連線,

輸入eof後,斷開與客戶端的連線,輸入quit關閉伺服器

讀取eof後,斷開和此客戶端連線,讀取quit關閉伺服器

*/

#define port 3333

void main()

printf("建立套接字成功\n");

/****************************開啟位址復用*******************/

int optval = 1;//1允許位址重用0禁止

int optlen = sizeof(optval);

setsockopt(s_fd,sol_socket,so_reuseaddr,&optval,optlen);

/********************初始化伺服器套接字*****************/

//htons和htonl將埠和位址轉成網路位元組序

//定義伺服器中位址中的域,af_inet指ipv4

s_addr.sin_family = af_inet;

//定義服務端的套接字埠

s_addr.sin_port = htons(port);

//定義套接字位址

//ip可是本伺服器的ip,用巨集inaddr_any代替,代表0.0.0.0,表明所有位址

s_addr.sin_addr.s_addr = htonl(inaddr_any);

/****************繫結套接字設定的埠號和ip***********************/

//對於bind,accept之類的函式,裡面套接字引數都是需要強制轉換成(struct sockaddr *)

//bind三個引數:伺服器端的套接字的檔案描述符

s_len = sizeof(s_addr);//設定傳送訊息長度

if( bind(s_fd,(struct sockaddr*)&s_addr,s_len) < 0)

printf("繫結套接字成功\n");

/*****************設定伺服器上的socket為監聽狀態*******************/

//監聽,最大連線數10

if(listen(s_fd,10) < 0)

printf("監聽成功埠: %d\n", port);

while(1)

printf("新連線:\n");

//inet_ntoa ip位址轉換函式,將網路位元組序ip轉換為點分十進位制ip

//表示式:char *inet_ntoa (struct in_addr);

printf("\tip is %s\n", inet_ntoa(c_addr.sin_addr));

printf("\tport is %d\n", htons(c_addr.sin_port));

printf("等待訊息...\n");

while(1)else if(databytes == 0)else

printf("%s\n",recvbuf);

//判斷退出,quit,斷開連線,關閉客戶端

if(strncmp(recvbuf,"quit",4) == 0)

//eof,斷開連線

if(strncmp(recvbuf, "eof",3) == 0)

/************************傳送資料*************************/

printf("--------------------傳送:");

scanf("%s",sendbuf);

send(c_fd,sendbuf,strlen(sendbuf)+1,0);

//判斷退出,quit,斷開連線,關閉客戶端

if(strncmp(sendbuf,"quit",4) == 0)

//eof,斷開連線

if(strncmp(sendbuf,"eof",3) == 0)

}//while 收發訊息

printf("斷開連線\n\n");

}//while accept

//關閉連線

close(s_fd);

printf("程式結束\n");

return;

}

客戶端:

#include #include //包含套接字的函式庫

#include //包含af_inet的相關結構

#include //包含af_inet的操作函式

#include #include #include #include /*

連線到伺服器後,會不停迴圈,等待輸入,

輸入eof後,斷開連線,輸入quit,斷開連線並關閉伺服器

讀取eof後,斷開連線,讀取quit,斷開連線並關閉伺服器

*/

#define port 3333

void main()

printf("建立套接字成功\n");

/********************初始化客戶端套接字*****************/

//htons和htonl將埠和位址轉成網路位元組序

//定義客戶端中位址中的域,af_inet指ipv4

addr.sin_family = af_inet;

//定義服務端的套接字埠

addr.sin_port = htons(port);

//指定伺服器端的ip,本地測試:127.0.0.1

//inet_addr()函式,將點分十進位制ip轉換成網路位元組序ip

addr.sin_addr.s_addr = inet_addr("127.0.0.1");

/**********************連線伺服器**********************/

if(connect(sockfd, (struct sockaddr *)&addr, sizeof(addr)) < 0)

printf("連線到伺服器...\n");

while(1)

if(strcmp(sendbuf, "eof") == 0)

//讀取訊息

printf("--------------------讀取:");

fflush(stdout);

databytes = recv(sockfd, recvbuf, 200, 0);

printf("%s\n", recvbuf);

if(strncmp(recvbuf, "quit",4) == 0)

if(strncmp(recvbuf, "eof",3) == 0)

}//關閉連線

close(sockfd);

printf("程式結束\n");

return;

}

TCP套接字程式設計

網路程式設計又稱為套接字程式設計,為了與遠端計算機進行資料傳輸,需要連線到網際網路,而程式設計中的 套接字 就是用來連線該網路的工具。它本身具有連線的含義,還可以表示為兩台計算機之間的網路連線。4.呼叫accept函式受理連線請求 基於tcp的服務端 客戶端 tcp伺服器端預設函式呼叫順序 sock...

TCP套接字程式設計!!!

一 socket程式設計的基本函式詳解,其中根據客戶端還是服務端,或者根據使用tcp還是udp,函式的呼叫流程有些許區別 1 socket 函式用於建立乙個套接字,一條通訊線路的端點。3 listen 在服務端程式成功建立套接字和與位址進行繫結之後,還需要準備在該套接字上接收新的連線請求。此時呼叫l...

tcp套接字程式設計

1.tcp協議 傳輸控制協議 面向連線,傳輸可靠,面向位元組流。實現資料可靠傳輸,傳輸靈活但是會造成資料粘包問題。2.tcp客戶端與服務端通訊流程 3.實現 客戶端 1 include tcpsocket.hpp 2 include3 4 void sigcb int signo 5 8 9 int...