首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> 關於C

C 語言 Socket 實戰:AF_INET 流式(Stream)通訊

     編輯:關於C

TCP 流式 Socket 流程

面向連線、可靠、有序、雙向位元組流。

伺服器端

  1. getaddrinfo() 取得位址(SOCK_STREAM)。
  2. socket()、bind()。
  3. listen(sfd, backlog) 建立連線佇列。
  4. accept() 取得已連線 Socket(cfd)。
  5. read(cfd, buf, ...) 接收資料。
  6. 關閉 cfd、sfd、freeaddrinfo()。

客戶端

  1. getaddrinfo()、socket()。
  2. connect(cfd, res->ai_addr, res->ai_addrlen) 主動連線。
  3. write(cfd, buf, ...) 送資料。
  4. close(cfd)、freeaddrinfo()。

核心程式碼片段

Server

listen(sfd, 2);
int cfd = accept(sfd, NULL, NULL);
read(cfd, buf, BUF_SIZE);
printf("[server] received: %s\n", buf);

Client

connect(cfd, res->ai_addr, res->ai_addrlen);
write(cfd, buf, sizeof(buf));
printf("[client] sent: %s\n", buf);

編譯與多客戶端測試

gcc server.c -o server
gcc client.c -o client
./server &
./client   # 第一次送 "hello"
./client   # 第二次送 "stream"

輸出範例

[client] sending data (hello ) to server by socket
[server] receiving data (hello) from client by socket
[client] sending data (stream ) to server by socket
[server] receiving data (stream) from client by socket

單執行緒迭代模型一次只能服務一個連線;高併發需搭配 fork/pthread/epoll。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved