這個實現方法只能夠單執行緒聊天,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...