源碼很好,不過對應新的2015編譯環境,要改變不少 變量定義,可以通信,隻要在SERVER端輸入PORT之後再Client的PORT輸入同樣的就能通了。 能實現基礎功能!!!兩種方法都有Winsock CSocket 。好例程,大讚一個
客戶端服務端套接字發送演示
Socket又稱"套接字",應用程序通常通過"套接字"向網絡發出請求或者應答網絡請求。
以J2SDK-1.3為例,Socket和ServerSocket類庫位於java.net包中。ServerSocket用於服務器端,Socket是建立網絡連接時使用的。在連接成功時,應用程序兩端都會產生一個Socket實例,操作這個實例,完成所需的會話。對於一個網絡連接來說,套接字是平等的,並沒有差別,不因為在服務器端或在客戶端而產生不同級別。不管是Socket還是ServerSocket它們的工作都是通過SocketImpl類及其子類完成的。
創建
函數原型:
int socket(int domain, int type, int protocol);
參數說明:
domain:協議域,又稱協議族(family)。常用的協議族有AF_INET、AF_INET6、AF_LOCAL(或稱AF_UNIX,Unix域Socket)、AF_ROUTE等。協議族決定了socket的地址類型,在通信中必須采用對應的地址,如AF_INET決定了要用ipv4地址(32位的)與端口號(16位的)的組合、AF_UNIX決定了要用一個絕對路徑名作為地址。
type:指定Socket類型。常用的socket類型有SOCK_STREAM、SOCK_DGRAM、SOCK_RAW、SOCK_PACKET、SOCK_SEQPACKET等。流式Socket(SOCK_STREAM)是一種麵向連接的Socket,針對於麵向連接的TCP服務應用。數據報式Socket(SOCK_DGRAM)是一種無連接的Socket,對應於無連接的UDP服務應用。
protocol:指定協議。常用協議有IPPROTO_TCP、IPPROTO_UDP、IPPROTO_STCP、IPPROTO_TIPC等,分別對應TCP傳輸協議、UDP傳輸協議、STCP傳輸協議、TIPC傳輸協議。
注意:1.type和protocol不可以隨意組合,如SOCK_STREAM不可以跟IPPROTO_UDP組合。當第三個參數為0時,會自動選擇第二個參數類型對應的默認協議。
2.WindowsSocket下protocol參數中不存在IPPROTO_STCP
返回值:
如果調用成功就返回新創建的套接字的描述符,如果失敗就返回INVALID_SOCKET(Linux下失敗返回-1)。套接字描述符是一個整數類型的值。每個進程的進程空間裏都有一個套接字描述符表,該表中存放著套接字描述符和套接字數據結構的對應關係。該表中有一個字段存放新創建的套接字的描述符,另一個字段存放套接字數據結構的地址,因此根據套接字描述符就可以找到其對應的套接字數據結構。每個進程在自己的進程空間裏都有一個套接字描述符表但是套接字數據結構都是在操作係統的內核緩衝裏。
綁定
函數原型:
int bind(SOCKET socket, const struct sockaddr* address, socklen_t address_len);
參數說明:
socket:是一個套接字描述符。
address:是一個sockaddr結構指針,該結構中包含了要結合的地址和端口號。
address_len:確定address緩衝區的長度。
返回值:
如果函數執行成功,返回值為0,否則為SOCKET_ERROR。
接收
函數原型:
int recv(SOCKET socket, char FAR* buf, int len, int flags);
參數說明:
socket:一個標識已連接套接口的描述字。
buf:用於接收數據的緩衝區。
len:緩衝區長度。
flags:指定調用方式。取值:MSG_PEEK 查看當前數據,數據將被複製到緩衝區中,但並不從輸入隊列中刪除;MSG_OOB 處理帶外數據。
返回值:
若無錯誤發生,recv()返回讀入的字節數。如果連接已中止,返回0。否則的話,返回SOCKET_ERROR錯誤,應用程序可通過WSAGetLastError()獲取相應錯誤代碼。
函數原型:
ssize_t recvfrom(int sockfd, void buf, int len, unsigned int flags, struct socketaddr* from, socket_t* fromlen);
參數說明:
sockfd:標識一個已連接套接口的描述字。
buf:接收數據緩衝區。
len:緩衝區長度。
flags:調用操作方式。是以下一個或者多個標誌的組合體,可通過or操作連在一起:
(1)MSG_DONTWAIT:操作不會被阻塞;
(2)MSG_ERRQUEUE: 指示應該從套接字的錯誤隊列上接收錯誤值,依據不同的協議,錯誤值以某種輔佐性消息的方式傳遞進來,使用者應該提供足夠大的緩衝區。導致錯誤的原封包通過msg_iovec作為一般的數據來傳遞。導致錯誤的數據報原目標地址作為msg_name被提供。錯誤以sock_extended_err結構形態被使用。
(3)MSG_PEEK:指示數據接收後,在接收隊列中保留原數據,不將其刪除,隨後的讀操作還可以接收相同的數據。
(4)MSG_TRUNC:返回封包的實際長度,即使它比所提供的緩衝區更長, 隻對packet套接字有效。
(5)MSG_WAITALL:要求阻塞操作,直到請求得到完整的滿足。然而,如果捕捉到信號,錯誤或者連接斷開發生,或者下次被接收的數據類型不同,仍會返回少於請求量的數據。
(6)MSG_EOR:指示記錄的結束,返回的數據完成一個記錄。
(7)MSG_TRUNC:指明數據報尾部數據已被丟棄,因為它比所提供的緩衝區需要更多的空間。
/*(MSG_TRUNC使用錯誤,4才是MSG_TRUNC的正確解釋)*/
(8)MSG_CTRUNC:指明由於緩衝區空間不足,一些控製數據已被丟棄。
(9)MSG_OOB:指示接收到out-of-band數據(即需要優先處理的數據)。
(10)MSG_ERRQUEUE:指示除了來自套接字錯誤隊列的錯誤外,沒有接收到其它數據。
from:(可選)指針,指向裝有源地址的緩衝區。
fromlen:(可選)指針,指向from緩衝區長度值。
發送
函數原型:
int sendto( SOCKET s, const char FAR* buf, int size, int flags, const struct sockaddr FAR* to, int tolen);
參數說明:
s:套接字
buf:待發送數據的緩衝區
size:緩衝區長度
flags:調用方式標誌位, 一般為0, 改變Flags,將會改變Sendto發送的形式
addr:(可選)指針,指向目的套接字的地址
tolen:addr所指地址的長度
返回值:
如果成功,則返回發送的字節數,失敗則返回SOCKET_ERROR。
接收連接請求
函數原型:
int accept( int fd, struct socketaddr* addr, socklen_t* len);
參數說明:
fd:套接字描述符。
addr:返回連接著的地址
len:接收返回地址的緩衝區長度
返回值:
成功返回客戶端的文件描述符,失敗返回-1。
140.5M / 09-05
76.4M / 03-25
55M / 06-05
237.9M / 04-13
900.9M / 03-02
96.2M / 07-06
311.2M / 07-06
335M / 07-06
200M / 07-06
413.8M / 07-06
484.7M / 09-27
165.4M / 09-05
353.9M / 06-05
131.8M / 04-13
195.6M / 03-03
45.6M / 09-08
665.2M / 07-06
2.84G / 07-06
93M / 07-06
338.3M / 07-06
1.38G / 07-26
488.3M / 07-16
109.8M / 06-03
142M / 01-08
1.2M / 11-23
548.8M / 04-13
1.6M / 04-13
1.48G / 03-18
646.6M / 03-03
133.7M / 03-03
110.5M / 09-05
33.4M / 09-05
325.8M / 08-12
60M / 04-29
254M / 04-25
659M / 04-23
1M / 12-26
253.4M / 12-08
253M / 12-08
1.19G / 11-16
369M / 09-22
181.5M / 09-22
201.2M / 09-05
488.3M / 07-16
248.9M / 12-08
248.9M / 12-08
100.6M / 03-06
148.9M / 03-06
1.12G / 07-06
1.25G / 07-06
126.7M / 02-04
1.76G / 09-22
1.92G / 04-17
201.5M / 04-13
7.31G / 07-01
94.3M / 07-06
2.48G / 07-06
7.63G / 07-06
1M / 07-06
778.1M / 07-06
561.8M / 07-11
72M / 07-06
548.7M / 07-06
1.00G / 07-06
9.13G / 07-06
126.2M / 07-06
72M / 07-06
105.1M / 07-06
132M / 07-06
132M / 07-06