Linux客戶端與伺服器相互實現聊天功能

2021-07-14 20:56:05 字數 2632 閱讀 5600

這個實現方法只能夠單執行緒聊天,recv是阻塞的,你發一句我回一句,必須一來一回,後文會記錄多執行緒實現聊天

客戶端**如下

#include #include #include #include #include #include #include #include int main(int arg, char *args)

int port = atoi(args[2]);

int st = socket(af_inet, sock_stream, 0);//初始化socket

struct sockaddr_in addr; // 定義乙個ip位址的結構

memset(&addr, 0, sizeof(addr));

addr.sin_family = af_inet;// 設定結構位址型別為tcp/ip位址

addr.sin_port = htons(port); // 制定乙個埠號:8080,htons:將short型別從host位元組型別轉到net位元組型別

// 將字元型別的ip位址轉化為int,賦給addr結構

= inet_addr("127.0.0.1");

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

// if (connect(st, (struct sockaddr *)&addr, sizeof(addr)) == -1)

char s[1024];

while (1)

memset(s, 0, sizeof(s));

if (recv(st, s, sizeof(s), 0) > 0)// 如果接受資料失敗迴圈結束,這裡是阻塞呼叫,會停在這裡等待服務端傳送訊息,服務端也是一樣

printf("recv %s\n", s);

else

break;

} close(st);

return exit_success;

}

服務端**如下

#include #include #include #include #include #include #include #include #include int main(int arg, char *args)

int port = atoi(args[1]);

int st = socket(af_inet, sock_stream, 0); //初始化socket

int on = 1;

if (setsockopt(st, sol_socket, so_reuseaddr, &on, sizeof(on)) == -1)

struct sockaddr_in addr; // 定義乙個ip位址結構

memset(&addr, 0, sizeof(addr));

addr.sin_family = af_inet; // 將addr結構的屬性定位為tcp/ip位址

addr.sin_port = htons(port); // 將本地位元組順序轉化為網路位元組順序

addr.sin_addr.s_addr = htonl(inaddr_any); // inaddr_any代表這個server上所有的位址

// 將ip與server程式繫結

if (bind(st, (struct sockaddr *) &addr, sizeof(addr)) == -1)

// server端開始listen

if (listen(st, 20) == -1)

//printf("listen success\n");

char s[1024];

int client_st = 0;

struct sockaddr_in client_addr; // 表示client端的ip位址

int i;

for (i = 0; i < 5; i++)

printf("accept by %s\n", inet_ntoa(client_addr.sin_addr));

while (1)

else

else

break;

}} close(client_st);

} close(st);

return 0;

}

makefile檔案如下

.suffixes: .c .o

cc=gcc

asrcs=sock.c

bsrcs=server.c

aobjs=$(asrcs:.c=.o)

bobjs=$(bsrcs:.c=.o)

aexec=client

bexec=server

all:$(aobjs) $(bobjs)

$(cc) -o $(aexec) $(aobjs)

$(cc) -o $(bexec) $(bobjs)

@echo '-------------ok--------------'

.c.o:

$(cc) -wall -g -o $@ -c $<

clean:

rm -f $(aobjs)

rm -f $(bobjs)

rm -f core*

伺服器與客戶端

建立socket操作,建立流式套接字,返回套接字型大小socksrv socket socket int af,int type,int protocol 第乙個引數,指定位址簇 tcp ip只能是af inet,也可寫成pf inet socket socksrv socket af inet,s...

客戶端與伺服器

cs與bs 軟體使用方式上的兩種劃分 c s client server pc客戶端與伺服器架構 特點 在伺服器當中就主要是乙個資料庫,把所有業務邏輯都交給客戶端來完成 優點 較為安全,使用者介面豐富,客戶體驗好 缺點 每次公升級都要重新安裝,針對不同的作業系統開發,可移植性差 b sbrowser...

伺服器與客戶端 client

include include include include include include include define serv port 9000 define buff size 1024 struct user void fillmsg struct user userinfo void...