日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
Linux中實(shí)現(xiàn)簡(jiǎn)單socket編程

網(wǎng)絡(luò)套接字Socket

套接字是通信端點(diǎn)的抽象,其英文socket,即為插座,孔的意思。如果兩個(gè)機(jī)子要通信,中間要通過(guò)一條線,這條線的兩端要連接通信的雙方,這條線在每一臺(tái)機(jī)子上的接入點(diǎn)則為socket,即為插孔,所以在通信前,我們?cè)谕ㄐ诺膬啥吮仨氁⒑眠@個(gè)插孔,同時(shí)為了保證通信的正確,端和端之間的插孔必須要一一對(duì)應(yīng),這樣兩端便可以正確的進(jìn)行通信了,而這個(gè)插孔對(duì)應(yīng)到我們實(shí)際的操作系統(tǒng)中,就是socket文件,我們?cè)賱?chuàng)建它之后,就會(huì)得到一個(gè)操作系統(tǒng)返回的對(duì)于該文件的描述符,然后應(yīng)用程序可以通過(guò)使用套接字描述符訪問(wèn)套接字,向其寫(xiě)入輸入,讀出數(shù)據(jù)。 站在更貼近系統(tǒng)的層級(jí)去看,兩個(gè)機(jī)器間的通信方式,無(wú)非是要通過(guò)運(yùn)輸層的TCP/UDP,網(wǎng)絡(luò)層IP,因此socket本質(zhì)是編程接口(API),對(duì)TCP/UDP/IP的封裝,TCP/UDP/IP也要提供可供程序員做網(wǎng)絡(luò)開(kāi)發(fā)所用的接口,這就是Socket編程接口。

網(wǎng)站的建設(shè)成都創(chuàng)新互聯(lián)公司專注網(wǎng)站定制,經(jīng)驗(yàn)豐富,不做模板,主營(yíng)網(wǎng)站定制開(kāi)發(fā).小程序定制開(kāi)發(fā),H5頁(yè)面制作!給你煥然一新的設(shè)計(jì)體驗(yàn)!已為成都資質(zhì)代辦等企業(yè)提供專業(yè)服務(wù)。

Linux下TCP的socket通信:

實(shí)現(xiàn)了一次客戶端向服務(wù)器發(fā)送數(shù)據(jù)和一次服務(wù)器向客戶端響應(yīng)的通信。

/*serve_tcp.c*/
#include 
#include 
#include 
#include 
#include 
#include 
#include 

int main(){
//創(chuàng)建套接字
int serv_sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

//初始化socket元素
struct sockaddr_in serv_addr;
memset(&serv_addr, 0, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
serv_addr.sin_port = htons(1234);

//綁定文件描述符和服務(wù)器的ip和端口號(hào)
bind(serv_sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr));

//進(jìn)入監(jiān)聽(tīng)狀態(tài),等待用戶發(fā)起請(qǐng)求
listen(serv_sock, 20);
//接受客戶端請(qǐng)求
//定義客戶端的套接字,這里返回一個(gè)新的套接字,后面通信時(shí),就用這個(gè)clnt_sock進(jìn)行通信
struct sockaddr_in clnt_addr;
socklen_t clnt_addr_size = sizeof(clnt_addr);
int clnt_sock = accept(serv_sock, (struct sockaddr*)&clnt_addr, &clnt_addr_size);

//接收客戶端數(shù)據(jù),并相應(yīng)
char str[256];
read(clnt_sock, str, sizeof(str));
printf("client send: %s\n",str);
strcat(str, "+ACK");
write(clnt_sock, str, sizeof(str));

//關(guān)閉套接字
close(clnt_sock);
close(serv_sock);

return 0;
}


/*client_tcp.c*/
#include 
#include 
#include 
#include 
#include 
#include 

int main(){
//創(chuàng)建套接字
int sock = socket(AF_INET, SOCK_STREAM, 0);

//服務(wù)器的ip為本地,端口號(hào)1234
struct sockaddr_in serv_addr;
memset(&serv_addr, 0, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
serv_addr.sin_port = htons(1234);

//向服務(wù)器發(fā)送連接請(qǐng)求
connect(sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr));
//發(fā)送并接收數(shù)據(jù)
char buffer[40];
printf("Please write:");
scanf("%s", buffer);
write(sock, buffer, sizeof(buffer));
read(sock, buffer, sizeof(buffer) - 1);
printf("Serve send: %s\n", buffer);

//斷開(kāi)連接
close(sock);

return 0;
}

注意:應(yīng)先運(yùn)行服務(wù)器端,再運(yùn)行客戶端。


文章名稱:Linux中實(shí)現(xiàn)簡(jiǎn)單socket編程
轉(zhuǎn)載源于:http://m.5511xx.com/article/cdpdohi.html