基於socket的簡單tcp客戶端與服務端程式

2021-07-30 12:42:44 字數 2473 閱讀 6209

前一段時間,我實習所在公司的同事說想學習網路程式設計的知識,我向他介紹了我學習網路程式設計的歷程,在此給大家分享一下,希望能給剛入門的小夥伴帶來幫助。我當時學網路程式設計時,沒有志同道合的小夥伴,沒有專業的導師教導,自己在這個過程中摸索前行,其中的困難只有自己清楚。

自己的學習歷程:

2,漸漸的發現window網路程式設計的api滿足不了我的需求,然後就轉到linux/unix網路程式設計。

3,在實驗室所謂的專案組(就我乙個人)首次接觸到了epoll。

在linux下學習linux/unix網路程式設計,我的學習過程是按照下面的模式循序漸進的:

makefile

all:

rm -rf server

rm -rf client

gcc -wall

-g server.c -o server

gcc -wall

-g client.c -o client

服務端程式

#include 

#include

#include

#include

#include

#include

#define buffsize 20480

#define backlog 100

int main(int argc, char **argv)

memset(&addr, 0, addrlen);

addr.sin_family = af_inet;

addr.sin_port = htons(atoi(argv[2]));

addr.sin_addr.s_addr = inet_addr(argv[1]);

listenfd = socket(af_inet, sock_stream, 0);

if (listenfd == -1)

if (setsockopt(listenfd, sol_socket, so_reuseaddr, &reuse, sizeof(reuse)) == -1)

if ((bind(listenfd, (const struct sockaddr *)&addr, addrlen)) == -1)

if (listen(listenfd, backlog) == -1)

while (1)

printf("new client from %s:%d\n", inet_ntoa(cliaddr.sin_addr), ntohs(cliaddr.sin_port));

while (1)

else

if (flag == -1)

}printf("\nrecv data: %s\n", buff);

if (send(clientfd, buff, strlen(buff) + 1, 0) == -1)

break;

}close(clientfd);

}end:

if (listenfd)

close(listenfd);

return

0;}

客戶端程式

#include 

#include

#include

#include

#include

#include

#define max_buff_size 1024

int main(int argc, char **argv)

memset(&addr, 0, addrlen);

addr.sin_family = af_inet;

addr.sin_port = htons(atoi(argv[2]));

addr.sin_addr.s_addr = inet_addr(argv[1]);

clientfd = socket(af_inet, sock_stream, 0);

if (clientfd == -1)

if (setsockopt(clientfd, sol_socket, so_reuseaddr, &reuse, sizeof(reuse)) == -1)

if (connect(clientfd, (const

struct sockaddr *)&addr, addrlen) == -1)

while (1)

printf("reve data ...\n");

memset(buff, 0, sizeof(buff));

flag = recv(clientfd, buff, sizeof(buff) - 1, 0);

if (flag == -1)

else

if (flag == 0)

else

}end:

if (clientfd)

close(clientfd);

return

0;}

基於TCP的socket程式設計

sockets 套接字 程式設計有三種,流式套接字 sock stream 資料報套接字 sock dgram 原始套接字 sock raw 基於 tcp的 socket 程式設計是採用的流式套接字。在這個程式中,將兩個工程新增到乙個工作區。要鏈結乙個 ws2 32.lib 的庫檔案。伺服器端程式設...

基於TCP的socket程式設計

基於tcp的socket程式設計的伺服器程式流程如下 1 建立套接字 socket 2 將套接字繫結到乙個本地位址和埠上 bind 3 將套接字設為監聽模式,準備接收客戶請求 listen 4 等待客戶請求到來,當請求到來後,接受連線請求,返回乙個新的對應於此次連線的套接字 accept 5 用返回...

基於TCP的Socket通訊

在win32平台上的winsock程式設計都要經過下列步驟 定義變數 獲得windock版本 載入winsock庫 初始化 建立套接字 設定套接字選項 關閉套接字 解除安裝winsock庫 釋放資源 1 建立乙個socket,用函式socket int socket int domain,int t...