C# socket 远程主机强迫关闭了一个现有的连接。
GLog.WriteBalanceLog("创迹服务socket连接");
int port = 8000;
clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
clientSocket.ReceiveTimeout = 1000;
IPAddress address = IPAddress.Parse("127.0.0.1");
IPEndPoint endPoint = new IPEndPoint(address, port);
clientSocket.Connect(endPoint);
GLog.WriteBalanceLog("向服务器发起连接......成功." + Environment.NewLine);
GLog.WriteBalanceLog("创迹服务socket初始化");
string rootPath = Environment.CurrentDirectory + "\\AiModule";
rootPath = rootPath.Replace("\\", "//");
string str_data = "{\r\n\"companyID\":\"5FRataJkbt1pruRUA3TKqA==\",\r\n\"appKey\":\"06728fcc4b4f4eea89721014ba7b807c\",\r\n\"secretKey\":\"9062a8f43f7c4b6fa2203011ab9c3458\",\r\n\"serviceKey\":\"4c495ca26fb2efb21e3b90edf299e7ed\",\r\n\"rootPath\":\"" + rootPath + "\",\r\n\"mode\":0\r\n}";
string str_command = "{\"command\":\"init\",\"data\":" + str_data + "}";
byte[] buffer = Encoding.Default.GetBytes(str_command);
clientSocket.Send(buffer);
byte[] recBuffer = new byte[1024 * 1024 * 2];
int length = -1;
GLog.WriteBalanceLog("创迹服务socket初始化_9");
length = clientSocket.Receive(recBuffer);
GLog.WriteBalanceLog("创迹服务socket初始化_10");
if (length < 0)
{
aIBalacnceResult.IsSuccess = false;
aIBalacnceResult.Message = string.Format("创迹服务socket初始化失败!");
return aIBalacnceResult;
}
string msg = Encoding.UTF8.GetString(recBuffer, 0, length);
length = clientSocket.Receive(recBuffer);
在调试模式下不会报错,在程序正常运行会报 “socket 远程主机强迫关闭了一个现有的连接。”
要看看你的日志了,楼上说的客户端问题包括网络不稳都会引发
一般都是客户端连接导致错误。看一下运行模式下客户端是否进行了错误操作。
三种情况
服务器端程序执行了 Socket.Close
服务器端程序强行退出造成的。
服务器有并发的最大连接数限制?
检查下服务端的socket代码或者端口等,发生这个错误,应该是客户端连接后,服务端认为客户端没有响应主动关闭了客户端的链接。检查下连接超时时间,确保网络是正常的。
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
socket.Connect("127.0.0.1", 80);
socket.Close();
以下答案由GPT-4.5Plus大模型(语音)与博主A努力中.......共同编写:
这个异常表示远程主机已经关闭了和本地主机的TCP连接。这通常是因为以下几个原因:
这类异常通常会在客户端程序连接远程服务器或等待远程主机响应时发生。对此,常见的处理方法有:
下面是一个简单的C# socket客户端程序,演示了如何处理该异常:
csharp
using System;
using System.Net;
using System.Net.Sockets;
namespace SocketClient
{
class Program
{
static void Main(string[] args)
{
Socket socket = null;
try
{
socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
socket.Connect(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8000));
}
catch (SocketException ex)
{
Console.WriteLine(ex.Message);
return;
}
byte[] data = new byte[1024];
while (true)
{
try
{
int count = socket.Receive(data);
string msg = Encoding.UTF8.GetString(data, 0, count);
Console.WriteLine(msg);
}
catch (SocketException ex)
{
Console.WriteLine(ex.Message);
break;
}
}
socket.Shutdown(SocketShutdown.Both);
socket.Close();
}
}
}
运行这个客户端程序,当远程主机关闭连接时,会捕获SocketException并打印异常消息,结束程序运行。