本博文給出了兩個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連線後不管是否使用都保持連線,但...