網路程式設計筆記2

2021-07-04 05:26:05 字數 4756 閱讀 9345

tcp/udp socket程式設計步驟

sockets(套接字)程式設計有三種,流式套接字(sock_stream),資料報套接字(sock_dgram),原始套接字(sock_raw);

windows環境下tcp/udp程式設計步驟:

1. 基於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();

}

2.基於udp的socket程式設計是採用的資料報套接字。

在這個程式中,將兩個工程新增到乙個工作區。同時還要鏈結乙個ws2_32.lib的庫檔案。

伺服器端程式設計的步驟:

1:載入套接字型檔,建立套接字(wsastartup()/socket());

2:繫結套接字到乙個ip位址和乙個埠上(bind());

3:等待和接收資料(sendto()/recvfrom());

4:關閉套接字,關閉載入的套接字型檔(closesocket()/wsacleanup())。

伺服器端**如下:

#include

#include

void main()

if ( lobyte( wsadata.wversion ) != 1 ||

hibyte( wsadata.wversion ) != 1 )

socket socksrv=socket(af_inet,sock_dgram,0);

sockaddr_in addrsrv;

addrsrv.sin_addr.s_un.s_addr=htonl(inaddr_any);

addrsrv.sin_family=af_inet;

addrsrv.sin_port=htons(7003);

bind(socksrv,(sockaddr*)&addrsrv,sizeof(sockaddr));

char recvbuf[50];

sockaddr addrclient;

int len=sizeof(sockaddr);

recvfrom(socksrv,recvbuf,50,0,(sockaddr*)&addrclient,&len);

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

closesocket(socksrv);

wsacleanup();

}

對於基於udp的socket客戶端來說,要進行如下步驟:

1:建立乙個套接字(socket);

2:向伺服器傳送資料(sendto);

3:關閉套接字;

**如下:

#include

#include

void main()

if ( lobyte( wsadata.wversion ) != 2 ||

hibyte( wsadata.wversion ) != 2 )

socket sockclient=socket(af_inet,sock_dgram,0);

sockaddr_in addrclient;

addrclient.sin_addr.s_un.s_addr=inet_addr("127.0.0.1");

addrclient.sin_family=af_inet;

addrclient.sin_port=htons(8889);

sockaddr_in addrsrv;

sendto(sockclient,"hi",3,0,(sockaddr*)&addrclient,sizeof(sockaddr));

}

linux環境下tcp/udp程式設計步驟:

tcp程式設計步驟:

一. 服務端:

1.socket(int domain,int type,int protocol):建立套接字;

2 .bind(int sockid,struct sockaddr *addrp,socklen_t addrlen):把本機位址和埠跟上一步建立的socket繫結在一起;

3.listen(int sockid,int qsize):監聽某套接字;

4.fd=accept(int sockid,struct sockaddr *callerid,socklen_t *addrlenp):等待某套接字接收資訊;

5.recv(int fd,void *buf,size_t nbytes,int flags):從套接字接收資料;

6.close(fd) 和close(sockid)

二.客戶端:

1. socket():建立套接字;

2.connect(int sockid,struct sockaddr *serv_addrp,socklen_t addrlen):連線到伺服器;

3. send(int sockfd,const void *buf,size_t nbytes,int flags):傳送資料到伺服器.

4. close(sockid);

udp程式設計步驟:

一,服務端:

1. socket():同上;

2. bind():同上;

3. recvfrom(int sockfd,void*buff,size_t nbytes,int flags,struct sockaddr*from,socklen_t*addrlen):在套接字口接收資料,並且記錄下接收到的資料**;一定要注意這裡的引數addrlen,它不僅是函式的輸出,也是函式的輸入!所以要在呼叫該函式之前對addrlen賦值sizeof(struct sockaddr)。否則返回的位址from將會出錯!

4. close(sockfd);

二. 客戶端:

1. socket();同上;

2. sendto(int sockfd,const void*buff,size_t nbytes,int flags,const struct sockaddr*to,socklen_t addrlen):往指定的位址傳送資料;

3. close(sockfd);

個人筆記 socket網路程式設計 2

2.2 buffer buffer是乙個物件,它包含一些要寫入或者要讀取的資料.在nio類庫中加入buffer物件,體現了新庫與原io的乙個重要的區別.在面向流的io中,可以將資料直接寫入或讀取到stream物件中.在nio庫中,所有資料都是用緩衝區處理的.快取區實質上是乙個陣列,通常它是乙個位元組...

網路程式設計2

1.tcp和udp的區別 1 tcp是面向連線的傳輸控制協議,而udp是無連線的資料報服務 2 tcp傳輸資料可靠,保證資料傳輸的正確性和順序,而udp傳輸資料不可靠,會發生丟包,不保證傳輸資料的順序 3 tcp對系統資源要求多,udp對系統資源要求少 4 udp具有較好的實時性,工作效率較tcp高...

網路程式設計2

url類 url url new url throws malformedurlexception 這樣可以通過其方法獲得我們想要的資訊 string getfile 獲取此 url 的檔名。myweb demo.html?name df,age 30 string gethost 獲取此 url ...