這裡運用前兩篇的內容做出以下例項**
server:
#include#include#include#include#include#include #include/*列印**執行方式*/
static void usage(const char *proc)
void thread_run(void *arg)
memset(buf,'\0',sizeof(buf));
printf("please enter: ");
fflush(stdout);
ssize_t _s2 = read(0,buf,sizeof(buf) - 1);
if(_s2 > 0)
}}int main(int argc,char *ar**)
//1.建立socket
int sock = socket(af_inet,sock_stream,0);
if(sock < 0)
/*分配設定位址物件*/
struct sockaddr_in local;
local.sin_family = af_inet;
local.sin_port = htons(atoi(ar**[2]));
local.sin_addr.s_addr = inet_addr(ar**[1]);
//將socket和位址繫結
if(bind(sock,(struct sockaddr*)&local,sizeof(local)) < 0)
//開啟對socket的監聽
if(listen(sock,10) < 0)
printf("bind and listen success!wait accept...\n");
//4.從監聽佇列裡阻塞獲取連線socket
struct sockaddr_in peer;
socklen_t len = sizeof(peer);
while(1)
printf("get connect,ip is : %s port is : %d\n",inet_ntoa(peer.sin_addr),ntohs(peer.sin_port));
pthread_t id;
pthread_create(&id,null,thread_run,(void*)fd);
pthread_detach(id);
}close(sock);
return 0;
}
client:
#include#include#include#include#include#include#include#includestatic void usage(const char *proc)
int main(int argc,char *ar**)
int sock = socket(af_inet,sock_stream,0);
if(sock < 0)
struct sockaddr_in remote;
remote.sin_family = af_inet;
remote.sin_port = htons(atoi(ar**[2]));
remote.sin_addr.s_addr = inet_addr(ar**[1]);
/*向伺服器發起連線*/
int ret = connect(sock,(struct sockaddr*)&remote,sizeof(remote));
if(ret < 0)
printf("connect success!\n");
char buf[1024];
while(1)
buf[_s -1] = '\0';
printf("%s\n",buf);}}
}close(sock);
return 0;
}
執行效果:
linux c程式設計 網路程式設計
在網路上,通訊服務都是採用 c s機制,也就是客戶端 伺服器端工作流程 使用socket 函式建立伺服器端通訊套介面 使用bind 函式將建立的套介面與伺服器位址繫結 使用listen 函式使伺服器套介面做好接收連線請求準備 使用accept 接收來自客戶端由connect 函式發出的連線請求 根據...
Linux C程式設計 六 之 網路程式設計 上
網路協議棧 網路基礎 tcp連線的三次握手和四次揮手 三次握手 tcp協議通過三個報文段完成連線的建立,這個過程稱為三次握手 three way handshake 過程如下圖所示。當客戶端呼叫connect時,觸發了連線請求,向伺服器傳送了syn j包,這時connect進入阻塞狀態 伺服器監聽到...
Linux C 網路程式設計教程
1 tcp 套接字通訊工作流程 一.面向連線的套接字socket通訊工作流程 為了實現伺服器與客戶機的通訊,伺服器和客戶機都必須建立套接字。伺服器與客戶機的工作原理可以用下面的過程來描述。1.伺服器先用 socket 函式來建立乙個套接字,用這個套接字完成通訊的監聽。2.用 bind 函式來繫結乙個...