請問你有沒有基於做過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線程?
給阻塞時候缺少的資源