sockets
(套接字)程式設計有三種,流式套接字(
sock_stream
),資料報套接字(
sock_dgram
),原始套接字(
sock_raw
);基於
tcp的
socket
程式設計是採用的流式套接字。
在這個程式中,將兩個工程新增到乙個工作區。要鏈結乙個
ws2_32.lib
的庫檔案。
伺服器端程式設計的步驟: 1
:載入套接字型檔,建立套接字
(wsastartup()/socket());
2:繫結套接字到乙個
ip位址和乙個埠上
(bind());
3:將套接字設定為監聽模式等待連線請求
(listen());
4:請求到來後,接受連線請求,返回乙個新的對應於此次連線的套接字
(accept());
5:用返回的套接字和客戶端進行通訊
(send()/recv());
6:返回,等待另一連線請求; 7
:關閉套接字,關閉載入的套接字型檔
(closesocket()/wsacleanup())。
伺服器端**如下:
#include
#include
void main()
if ( lobyte( wsadata.wversion ) != 1 ||
hibyte( wsadata.wversion ) != 1 )
socket socksrv=socket(af_inet,sock_stream,0);
sockaddr_in addrsrv;
addrsrv.sin_addr.s_un.s_addr=htonl(inaddr_any);
addrsrv.sin_family=af_inet;
addrsrv.sin_port=htons(6000);
bind(socksrv,(sockaddr*)&addrsrv,sizeof(sockaddr));
listen(socksrv,5);
sockaddr_in addrclient;
int len=sizeof(sockaddr);
while(1) }
客戶端程式設計的步驟: 1
:載入套接字型檔,建立套接字
(wsastartup()/socket());
2:向伺服器發出連線請求
(connect());
3:和伺服器端進行通訊
(send()/recv());
4:關閉套接字,關閉載入的套接字型檔
(closesocket()/wsacleanup())。
客戶端的**如下:
#include
#include
void main()
if ( lobyte( wsadata.wversion ) != 1 ||
hibyte( wsadata.wversion ) != 1 )
socket sockclient=socket(af_inet,sock_stream,0);
sockaddr_in addrsrv;
addrsrv.sin_addr.s_un.s_addr=inet_addr("127.0.0.1");
addrsrv.sin_family=af_inet;
addrsrv.sin_port=htons(6000);
connect(sockclient,(sockaddr*)&addrsrv,sizeof(sockaddr));
char recvbuf[50];
recv(sockclient,recvbuf,50,0);
printf("%s/n",recvbuf);
send(sockclient,"hello",strlen("hello")+1,0);
closesocket(sockclient);
wsacleanup();}
基於TCP的socket程式設計
基於tcp的socket程式設計的伺服器程式流程如下 1 建立套接字 socket 2 將套接字繫結到乙個本地位址和埠上 bind 3 將套接字設為監聽模式,準備接收客戶請求 listen 4 等待客戶請求到來,當請求到來後,接受連線請求,返回乙個新的對應於此次連線的套接字 accept 5 用返回...
基於TCP的socket程式設計
tcp客戶用connect函式來建立tcp伺服器的連線 bind函式把乙個本地位址賦予乙個套接字 listen函式 listen函式僅由tcp伺服器呼叫,它做兩件事 當socket函式建立乙個套接字時,它被假設為乙個主動套接字,listen函式把乙個未連線的套接字轉換成乙個被動套接字。本函式第二個引...
程式設計實現基於tcp的socket程式設計
server端 public class server socket.shutdowninput 關閉輸入流 4 獲取輸出流,響應客戶端的請求 outputstream os socket.getoutputstream printwriter pw new printwriter os 包裝為列印...