socket通訊問題

2021-08-30 13:43:12 字數 2289 閱讀 1139

2023年12月11日 14:55:04 yiqijinbu 閱讀數:3035

tcp:面向連線的,所以在服務端繫結埠後,需要監聽listen()是否有客戶端傳送請求,有的話,accept()建立乙個新的socket物件,用於傳送和接收資訊,

就想先建造了一條高速路,再建造一輛貨車拉貨。

udp:無連線的,所以在服務端繫結埠後,不需要監聽listen(),也不用建立乙個新的socket物件用於接收傳送資訊,但是在傳送和接收時,要講本身的埠

做引數傳送給對方,這樣在交流時,對方才能確定自己。

udp協議:

client端:

static void main(string args)

:", remote.tostring());

console.writeline("收到的服務端訊息:"+encoding.utf8.getstring(bytmsgtoserve, 0, recv));

socket.close();

console.readline();

} /// /// 獲取本地ip位址資訊

///

public static string getaddressip()

}return addressip;

}

server端:

static void main(string args)

:", remote.tostring());

console.writeline("收到的資訊:-"+encoding.utf8.getstring(bytrecv, 0, intbytes));

string welcome = "welcome to my test server!";

bytrecv = encoding.ascii.getbytes(welcome);

socket.sendto(bytrecv, bytrecv.length, socketflags.none, remote);

console.readline();

}/// /// 獲取本地ip位址資訊

///

public static string getaddressip()

}return addressip;

}

當將服務層寫成window服務時,如果客戶端關閉,服務端會報錯,「遠端主機關閉了乙個現有的鏈結」,然後整個服務都停止了。

解決辦法:為socket物件設定低階操作模式

//  為 socket 設定低階操作模式,不然當客戶端關閉的時候,會報錯

uint ioc_in = 0x80000000;

uint ioc_vendor = 0x18000000;

uint sio_udp_connreset = ioc_in | ioc_vendor | 12;

socket.iocontrol((int)sio_udp_connreset, new byte , null);

另外,在window服務中,定時控制項是不能用的,但是也不報錯,不提醒,如果要定時迴圈,

解決辦法:

system.timers.timer tmrselectcom = new system.timers.timer(2000);

tmrselectcom.elapsed += new system.timers.elapsedeventhandler(tmrselectcom_tick);

tmrselectcom.enabled = true;

tcp協議:

服務端:

static void main(string args)

private static string getaddressip()

}return straddressip;

}

客戶端:

public static void main(string args)

private static string getaddressip()

}return addressip;

}

tcp圖:

udp圖:

socket通訊收到rst指令問題

現象為客戶端連線服務端,服務端日誌返回寫socket成功,但是客戶端報錯 read socket error 把能調的超時時間都調大了,但是還是報錯 抓包結果服務端 抓包結果客戶端 分析原因 1 可以看到客戶端是傳送完請求後,收到rst指令,導致連線斷開 客戶端新增日誌列印errno if num ...

socket通訊程式設計

1 socket通訊模型如下 應用程式通過套接字可以進行通訊,可以使用udp協議或者使用tcp協議,當客戶端和伺服器端的協議時相對應的,客戶端使用tcp,那麼伺服器端使用tcp 2 udp協議 把資料打包成資料報,然後直接傳送對應的ip位址,速度快,但是不保證 成功率,並且資料大小有限 tcp協議 ...

Socket通訊基礎

socket通訊傳遞資料 服務端 using system.net using system.net.sockets using system.text using system.threading thread mythread socket socket 清理所有正在使用的資源。protecte...