網路程式設計Winsock connect

2021-06-19 13:50:57 字數 2183 閱讀 8075

connect 與特定的套接字建立連線

int connect(

_in_ socket s,

_in_ const struct sockaddr *name,

_in_ int namelen

);

返回值分為兩種情況:阻塞和非阻塞。

對於阻塞的套接字:0表示正確,socket_error表示錯誤。詳細錯誤資訊使用wsagetlasterror。

對於非阻塞套接字,不能立刻判斷連線是否完成。函式會返回socket_error,但這並不表示出錯,呼叫wsagetlasterror會得到wsaewouldblock。需要分三種情況討論:

使用select函式來決定連線請求的完成,通過檢視套接字是否可寫。

如果應用程式使用wsaasyncselect來處理連線事件,它會收到fd_connect通知來表示連線操作已經完成。(無論是否成功)

如果應用程式使用wsaeventselect來處理連線事件,那麼相關的事件物件會發出訊號來表示連線操作已經完成。(無論是否成功)

如果s沒有繫結,系統會給它分配乙個系統的唯一值,並標為已繫結。

是否成功連線:

對於面向連線的非阻塞套接字

1、客戶端使用select函式,成功資訊儲存在writefds裡,失敗的在exceptfds裡。

2、客戶端使用wsaayncselect或者wsaeventselect,通知資訊使用fd_connect,錯誤碼也使用fd_connect表示,表示成功或者因為特別的原因而失敗。

對於面向無連線的套接字:任何不是目的位址的資料報都會被丟棄。如果name為0,則連線會斷開,然後send/wsasend和recv/wsarecv會呼叫失敗並且返回錯誤碼wsaenotconn。但是sendto/wsasendto和recvfrom/wsarecvfrom仍舊可以用。即使套接字已經連線了,預設的目的地也可以通過僅僅再次呼叫connect而改變,屬於之前name的資料報會被丟棄。

對於無連線的套接字,name可以表示任何可用位址,包括廣播位址。但是必須用setsockopt來開啟o_broadcast設定。(否則失敗並得到錯誤碼wsaeacces)

這一段不知道什麼意思,看起來很厲害:

msdn上的示例**:

;

int iresult = wsastartup(makeword(2, 2), &wsadata);

if (iresult != no_error)

//----------------------

// create a socket for connecting to server

socket connectsocket;

connectsocket = socket(af_inet, sock_stream, ipproto_tcp);

if (connectsocket == invalid_socket)

//----------------------

// the sockaddr_in structure specifies the address family,

// ip address, and port of the server to be connected to.

sockaddr_in clientservice;

clientservice.sin_family = af_inet;

clientservice.sin_addr.s_addr = inet_addr("127.0.0.1");

clientservice.sin_port = htons(27015);

//----------------------

// connect to server.

iresult = connect(connectsocket, (sockaddr *) & clientservice, sizeof (clientservice));

if (iresult == socket_error)

wprintf(l"connected to server.\n");

iresult = closesocket(connectsocket);

if (iresult == socket_error)

wsacleanup();

return 0;

}

python網路程式設計 TCP網路程式設計

tcp程式設計 客戶端 import socket 1 套接字 tcp socket socket.socket socket.af inet,socket.sock stream 2 建立鏈結 tcp socket.connect 172.27.35.1 8080 3 傳送資訊 tcp socke...

網路程式設計 網路基礎

1.物理層 提供建立 維護和拆除物理鏈路所需的機械 電氣 功能和規程的特性 提供有關在傳輸介質上傳輸非結構的位流及物理鏈路故障檢測指示。在這一層,資料還沒有被組織,僅作為原始的位流或電氣電壓處理,單位是位元。常用協議 eia tia rs 232 eia tia rs 449 v.35 rj 45 ...

網路程式設計 網路概述

應用層 常見的協議有http協議 ftp協議 傳輸層 常見協議有tcp udp協議。網路層 常見的協議有ip協議 icmp協議 igmp協議 鏈路層 常見的協議有arp協議 rarp協議。tcp 傳輸控制協議 是一種面向連線的 可靠的 基於位元組流的傳輸層通訊協議。http 超文字傳輸協議 是網際網...