1. 如何獲得Socket連接客戶端的IP地址
如果伺服器端要獲取客戶端ip的話:
//假設socket(),bind(),listen()函數已經完成
addrlen=sizeof(client);
connetfd=accept(listenfd,(structsockaddr*)&client,&addrlen);
那麼client.sin_port 就是客戶端的埠
client.sin_addr.s_addr 就是客戶端的ip。
這兩個都是以網路位元組序來保存的,如果要printf的話需要先轉化為主機位元組序
2. 客服端和服務端建立TCP連接後,怎麼從服務端獲取客戶端的IP地址
Socket clientSock = ServerSocket.Accpet();
接受客戶端連接
DateTime connectTime = DateTime.Now;
連接一個客戶端後,當前時間就是連接時間。
(clientSock.RemoteEndPoint as IPEndPoint).IPAddress;
ip地址
(clientSock.RemoteEndPoint as IPEndPoint).Port;
埠號
3. 伺服器如何獲取客戶端的IP地址,並與客戶端建立TCP連接
客戶端的IP自動獲取,關鍵要看客戶端的IP是由誰來分配的,如果都是有ISP提供的那麼伺服器利用IP去連接客戶端就不太可能。可以嘗試用下面兩種思路解決:
1、能否讓客戶機主動連接伺服器。
2、使用動態DNS。讓每個客戶機都申請一個動態域名,無論它的IP怎樣變,當改變以後都會到DNS伺服器進行注冊,然後伺服器使用主機的名字訪問客戶端。
4. TCP伺服器如何檢測客戶端的IP和埠
你熟悉socket
API不?如果不熟悉的話建議先看看socket編程的文檔。這是鏈接地址:http://msdn.microsoft.com/en-us/library/ms738545(v=VS.85).aspx
一般服務端的sokcet
API調用順序為:
bind()
//
設置服務埠
listen()
//
等待客戶端連接
accept()
//
與客戶端建立連接
請參考:http://msdn.microsoft.com/en-us/library/ms737526(v=VS.85).aspx
這是accept函數的原型:
SOCKET
accept(
__in
SOCKET
s,
__out
struct
sockaddr
*addr,
__inout
int
*addrlen
);
第二個參數,
addr,包含了客戶端的IP地址和埠。你可以認為這就是客戶端的IP和埠。但是,要注意的是這個IP不一定就完全等價於客戶端本機的埠。比如:客戶端在一個區域網里,IP地址是192.168.1.100,然後它通過ADSL路由連接到internet,再通過internet連接到服務端。這個時候,服務端獲得的客戶端IP地址就可能是那個ADSL路由的IP。