最近工作比較閒,就學習了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...