有鏈結和無鏈結的socket通訊

2021-10-12 04:37:38 字數 3325 閱讀 9853

本博文給出了兩個socket通訊的例子,乙個是需要建立鏈結的,乙個是不需要建立鏈結的。

1.直接上**:echo_serv.c

#include #include #include #include #include #include #include #include #define ehco_port 8080

#define max_client_num 10

int main()

else

//設定server位址結構

bzero(&serv_addr,sizeof(serv_addr));

serv_addr.sin_family = af_inet;

serv_addr.sin_port = htons(ehco_port);

serv_addr.sin_addr.s_addr = htons(inaddr_any);

bzero(&(serv_addr.sin_zero),8);

//把位址和套接字繫結

if(bind(sock_fd,(struct sockaddr*)&serv_addr,sizeof(serv_addr))!=0)

else

//設定套接字接聽

if(listen(sock_fd,max_client_num)!=0)

else

//建立新連線對應的套接字

len = sizeof(clientadd);

clientfd = accept(sock_fd,(struct sockaddr*)&clientadd,&len);

if(clientfd<=0)

//接收使用者發來的資料

while((n=recv(clientfd,buff,100,0))>0)

close(clientfd);

close(sock_fd);

return 0;

}

echo_client.c

#include #include #include #include #include #include #include #include #define ehco_port 8080

#define max_command 5

int main()

; char tmp_buf[100];

char send_buf[100];

int n,i,x=500,y=500;

// sock_fd = socket(af_inet, sock_stream,0);

if(sock_fd == -1)

else

//bzero(&serv_addr,sizeof(serv_addr));

serv_addr.sin_family = af_inet;

serv_addr.sin_port = htons(ehco_port);

serv_addr.sin_addr.s_addr = htons(inaddr_any);

bzero(&(serv_addr.sin_zero),8);

// if(-1 == connect(sock_fd, (struct sockaddr*)&serv_addr,sizeof(serv_addr)))

printf("success connect to server!\n");

//傳送資料

/* for(i=0;itime_serv.c

#include#include#include#include#include#include#include#include#include#define time_port 9090

#define data_size 256

int main()

printf("create socket.");

local.sin_family = af_inet;

local.sin_port = htons(time_port);

local.sin_addr.s_addr=inaddr_any;

if(0!=bind(sock_fd,(struct sockaddr*)&local,sizeof(local)))

printf("bind socket.");

fromlen = sizeof(from);

printf("waiting request from client...\n");

while(1)

buff[n]='\0';

printf("client request: %s\n",buff);

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

break;

if(0==strncmp(buff,"time",4))

}close(sock_fd);

}

time_client.c

#include#include#include#include#include#include#include#include#include#define time_port 9090

#define data_size 256

int main()

printf("create socket.");

serv.sin_family = af_inet;

serv.sin_port = htons(time_port);

serv.sin_addr.s_addr=inaddr_any;

servlen = sizeof(serv);

// strcpy(buff,"time");

if(-1==sendto(sock_fd,buff,sizeof(buff),0,(struct sockaddr*)&serv,servlen))

printf("send time request\n");

n=recvfrom(sock_fd,buff,sizeof(buff),0,(struct sockaddr*)&serv,&servlen);

if(n<=0)

buff[n]='\0';

printf("time from server:%s",buff);

strcpy(buff,"quit");

if(-1==sendto(sock_fd,buff,sizeof(buff),0,(struct sockaddr*)&serv,servlen))

printf("send quit command\n");

close(sock_fd);

return 0;

}

編譯的話,可以使用之前寫的makefile檔案,生成同名的可執行檔案。

socket鏈結和http鏈結

我們在傳輸資料時,可以只使用 傳輸層 tcp ip協議,但是那樣的話,如果沒有應用層,便無法識別資料內容,如果想要使傳輸的資料有意義,則必須使用到應用層協議,應用層協議有很多,比如http ftp telnet等,也可以自己定義應用層協議。web使用http協議作應用層協議,以封裝http文字資訊,...

阻塞的Socket鏈結

usr bin perl w socket cli.plx usage socket cli.plx 同乙個檔案重複執行次數 傳送socket包存放的檔案 從檔案第幾行開始執行 use strict use io socket use benchmark my addr 127.0.0.1 my p...

socket長連線和短鏈結區別

短連線 連線 傳輸資料 關閉連線 http是無狀態的,瀏覽器和伺服器每進行一次http操作,就建立一次連線,但任務結束後就中斷連線。短連線是指socket連線後傳送後接收完資料後馬上斷開連線。長連線連線 傳輸資料 保持連線 傳輸資料 關閉連線 長連線指建立socket連線後不管是否使用都保持連線,但...