基於socket的簡單聊天程式(一)

2021-05-21 20:15:42 字數 3395 閱讀 2672

最近工作比較閒,就學習了socket程式設計的基礎知識,動手編寫了乙個功能最簡單的區域網聊天程式:

乙個客戶端,乙個服務端。

常用函式功能簡介

wsastartup

在乙個程序初始化

ws2.dll

動態庫。

int wsastartup(

word wversionrequested,//

所需版本號;

lpwsadata lpwsadata//

用於接受

socket

實現的細節; );

示例**:

if (wsastartup(makeword(2,0),&wsadata))

wsacleanup

終結對動態庫

ws2.dll

的使用。

socket

建立乙個與服務提供者相關聯的socket 。

socket socket(

int af,//

協議族(如:af_inet );

int type,

int protocol//

所使用的協議 (如:ipproto_tcp ,ipproto_udp ); );

示例**:

serversocket = socket(af_inet,sock_stream,ipproto_tcp);

if ( serversocket ==  invalid_socket)

bind

使用本地位址繫結某socket 。

int bind(

socket s,//

未繫結的socket 描述符;

const struct sockaddr far* name,//

繫結位址;

int namelen//

引數name 的長度; );

示例**:

char   ipaddress[32] = ;

sa.sin_family = af_inet;

sa.sin_port   = htons(3068);

sa.sin_addr.s_un.s_addr = inet_addr(ipaddress);//server address can be inaddr_any;

rv = bind(serversocket, (sockaddr *) &sa, sizeof(sockaddr));

if (invalid_socket == rv)

listen

將socket 置於監聽狀態,等待即將到來的連線請求。

int listen(

socket s,//

未連線, 但已經繫結位址的secket;

int backlog//

等待佇列的最大長度; );

示例**:

rv = listen(serversocket, 1);

if ( socket_error == rv )

connect

使用建立的socket 連線指定的另乙個socket 位址。

int connect(

socket s,//socket to be connected;

const struct sockaddr far* name,//address to which socket connect;

int namelen );

示例**:

char   ipaddress[32] = ;

addrlen = sizeof(struct sockaddr_in);

sa.sin_family = af_inet;

sa.sin_port   = htons(8080);//myport,80,8080,25

sa.sin_addr.s_un.s_addr = inet_addr(ipaddress);

rv = connect(clientsocket,(sockaddr *) &sa, sizeof(sockaddr));

if (null == rv)

recv

從建立連線的socket 接受資料。

int recv(

socket s,//

已經建立連線的

socket;

char far* buf,//

接受資料的

buffer;

int len,//buffer

長度;

int flags//

); 示例**:

rv = recv(acceptsocket,buffer,buflen,0);

if ( socket_error == rv )

else

rcvlen = rv;

accept

允許在指定

socket

上建立連線。

socket accept(

socket s,//

已經處於監聽狀態的

socket;

struct sockaddr far* addr,//

連線實體的位址描述;

int far* addrlen );

示例**:

acceptsocket = accept(serversocket, null, null);

if ( invalid_socket == acceptsocket )

send

通過已經建立連線

socket

傳送資料。

int send(

socket s,

const char far* buf,//

接受資料的

buffer;

int len,//buffer

長度;

int flags );

示例**:

rv = send(clientsocket,"hello!

glad to see you!/r/n",strlen,0);

if ( socket_error == rv )

shut down

關閉通過指定

socket

接受或傳送資料。

int shutdown(

socket s,

int how//

指定不再允許的操作; );

示例**:

shutdown(s,sd_receive);//sd_send,sd_both;.

closesocket 關閉

socket

並釋放相關資源。

int closesocket(

socket s//

需要關閉的

socket; );

示例**:

closesocket(s);

簡單的socket聊天程式

伺服器 include include include include include include include include define port 18888 埠 define buflen 1024 快取區大小 define listennum 20 socket最大監聽數 int m...

基於UDP簡單聊天程式

server.c include include include include include include include include include include define server port 8888 define max msg size 1024 void udps re...

基於UDP的簡單聊天程式

pragma comment lib,ws2 32.lib include include void main if lobyte wsadata.wversion 1 hibyte wsadata.wversion 1 socket socksrv socket af inet,sock dgra...