0
TCPでリッスンするとデータを送信できません。すべての受信接続をリッスンする必要があり、必要なときにデータを送信する必要があります。ときに、プログラムのロード聞くが、私は、データを送信しようとすると、それは、このエラーを与えるしますTCP-サーバとしてリッスンするときにデータを送信できません
"Only one usage of each socket address (protocol/network address/port) is normally permitted (typically under load)."
そしてここでは、私のコードは次のとおりです。
public void Send(object sender, System.EventArgs e)
{
String str = "08";
String str2 = "4213";
String CRCvalue = CRC("08" + str2);
String str3 = str2 + CRCvalue;
Connect("localhost", "hello localhost " + Guid.NewGuid());
}
static void Connect(String server, String message)
{
try
{
Int32 port = 2101;
TcpClient client = new TcpClient(server, port);
Byte[] data = System.Text.Encoding.ASCII.GetBytes(message);
NetworkStream stream = client.GetStream();
// Send the message to the connected TcpServer.
stream.Write(data, 0, data.Length);
System.Diagnostics.Debug.WriteLine("Sent");
stream.Close();
client.Close();
}
catch (ArgumentNullException e)
{
System.Diagnostics.Debug.WriteLine("ArgumentNullException: {0}", e);
}
catch (SocketException e)
{
System.Diagnostics.Debug.WriteLine("SocketException: {0}", e);
}}
protected override void OnLoad(EventArgs e)
{
CreateServer();
}
private static void CreateServer()
{
var tcp = new TcpListener(System.Net.IPAddress.Any,25565);
tcp.Start();
var listeningThread = new Thread(() =>
{
while (true)
{
var tcpClient = tcp.AcceptTcpClient();
ThreadPool.QueueUserWorkItem(param =>
{
NetworkStream stream = tcpClient.GetStream();
string incomming;
byte[] bytes = new byte[1024];
int i = stream.Read(bytes, 0, bytes.Length);
incomming = System.Text.Encoding.ASCII.GetString(bytes, 0, i);
System.Diagnostics.Debug.WriteLine(incomming);
tcpClient.Close();
}, null);
}
});
任意の助けがapprecitatedされます。
"データを送信しようとする"コードを表示できますか?あなたが質問に持っているコードは、メッセージを送信し、データを聞くための方法を示しています.Connect()は実際にどこに使われていますか? 例外がスローされる場所、Connect()メソッド、またはCreateServer()メソッドに記載されている場所は? – Ben
サイドノート:TCPは(各方向の)バイトストリームであり、メッセージングではないことに注意してください。 'Read'の呼び出しから得られるものが、もう一方の' Write'の呼び出しと1-1で一致するという保証はありません。 –
私は今それを追加しました。 –