socket網絡編程常見問題

請問你有沒有基於做過socket的開發?具體網絡層的操作該怎麼做?(其實也是問網絡編程的基本步驟)

服務端:socket-bind-listen-accept

客戶端:socket-connect

請你來說一下socket編程中服務器端和客戶端主要用到哪些函數

1)基於TCP的socket:

1、服務器端程序:

1創建一個socket,用函數socket()

2綁定IP地址、端口等信息到socket上,用函數bind()

3設置允許的最大連接數,用函數listen()

4接收客戶端上來的連接,用函數accept()

5收發數據,用函數send()和recv(),或者read()和write()

6關閉網絡連接

2、客戶端程序:

1創建一個socket,用函數socket()

2設置要連接的對方的IP地址和端口等屬性

3連接服務器,用函數connect()

4收發數據,用函數send()和recv(),或read()和write()

5關閉網絡連接

2)基於UDP的socket:

1、服務器端流程

1建立套接字文件描述符,使用函數socket(),生成套接字文件描述符。

2設置服務器地址和偵聽端口,初始化要綁定的網絡地址結構。

3綁定偵聽端口,使用bind()函數,將套接字文件描述符和一個地址類型變量進行綁定。

4接收客戶端的數據,使用recvfrom()函數接收客戶端的網絡數據。

5向客戶端發送數據,使用sendto()函數向服務器主機發送數據。

6關閉套接字,使用close()函數釋放資源。UDP協議的客戶端流程

2、客戶端流程

1建立套接字文件描述符,socket()。

2設置服務器地址和端口,struct sockaddr。

3向服務器發送數據,sendto()。

4接收服務器的數據,recvfrom()。

5關閉套接字,close()。

請你講述一下Socket編程的send() recv() accept() socket()函數?

send函數用來向TCP連接的另一端發送數據。客戶程序一般用send函數向服務器發送請求,而服務器則通常用send函數來向客戶程序發送應答,send的作用是將要發送的數據拷貝到緩衝區,協議負責傳輸。

recv函數用來從TCP連接的另一端接收數據,當應用程序調用recv函數時,recv先等待s的發送緩衝中的數據被協議傳送完畢,然後從緩衝區中讀取接收到的內容給應用層。
accept函數用了接收一個連接,內核維護了半連接隊列和一個已完成連接隊列,當隊列爲空的時候,accept函數阻塞,不爲空的時候accept函數從上邊取下來一個已完成連接,返回一個文件描述符。

 

怎麼喚醒被阻塞的socket線程?

給阻塞時候缺少的資源

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章