Linux下 C語言編寫 TCP Server

2021-09-26 21:27:35 字數 1895 閱讀 2059

用c寫的,做了函式的封裝,記錄在此,方便查詢

server.h

#ifndef __server_h

#define __server_h

#define false -1

#define true 0

int server_init(char *server_port); //伺服器初始化

int wait_accept(int server_fd); //等待客戶機連線

void server_destory(int server_fd); //銷毀伺服器

#endif

server.c

#include "server.h"

#include #include #include #include #include #include #include #include #include #define size 128

#define bufsize 1024

int server_init(char *server_port)

int val = 1;

if (setsockopt(server_fd, sol_socket, so_reuseaddr, &val,

sizeof(val)) < 0) //設定套接字

server_raddr.sin_family = af_inet;

server_raddr.sin_port = htons(atoi(server_port));

inet_pton(af_inet, "0.0.0.0", &server_raddr.sin_addr);

if (bind(server_fd, (void *)&server_raddr, sizeof(server_raddr)) <

0) // listen第二引數為等待連線佇列的最大長度  不管設定的多少,都會被捨入系統裡面最接近的有效值

//目前測試,設定為1  能同時連上3個

if (listen(server_fd, 5) <

0) char ipstr[128];

if (inet_ntop(af_inet, &server_raddr.sin_addr, ipstr, sizeof(ipstr)) ==

null)

printf("[%d] server :%s %d\n", server_fd, ipstr,

ntohs(server_raddr.sin_port));

return server_fd;

}int wait_accept(int server_fd)

int new_client_fd = -1;

struct sockaddr_in new_client_raddr;

socklen_t new_client_raddr_len = sizeof(new_client_raddr);

new_client_fd =

accept(server_fd, (void *)&new_client_raddr, &new_client_raddr_len);

if (new_client_fd < 0)

char ipstr[128];

if (inet_ntop(af_inet, &new_client_raddr.sin_addr, ipstr, sizeof(ipstr)) ==

null)

printf("[%d] client:%s %d\n", new_client_fd, ipstr,

ntohs(new_client_raddr.sin_port));

return new_client_fd;

}void server_destory(int server_fd)

Linux下編寫執行C語言程式

1.gcc 1.c o 1.out 1.out命名 2.gcc lm 1.c a.out使用math.h中宣告的庫函式還有一點特殊之處,gcc命令列必須加 lm選項,因為數學函式位於libm.so庫檔案中 這些庫檔案通常位於 lib目錄下 lm選項告訴編譯器,我們程式中用到的數學函式要到這個庫檔案裡...

Linux下 使用C語言編寫who命令

在linux 下 who命令是查詢當前登入的每個使用者。who的預設輸出包括使用者名稱 終端型別 登入日期及遠端主機。如圖 我們man一下who,在聯機幫助裡可以看到,who命令是讀取 var run utmp檔案來得到以上資訊的。我們在man一下utmp,知道utmp這個檔案,是二進位制檔案,裡面...

C語言編寫 linux 下的 touch 命令

用c語言實現linux 下 touch 命令的操作 touch 建立檔案或者修改檔案或目錄的時間戳。實現效果 可新增三個引數 c no create do not create any files 不建立不存在的檔案 a change only the access time 只修改檔案的訪問時間 ...