TCP 连接建立后 如果没有数据发送,多长时间会断开
yjsfi 2010-01-28 05:33:20 我做了一个 socket 5 代理客户端代码如下
//设置代理服务器地址和端口
TcpClient client = new TcpClient();
IPEndPoint ipPoint = new IPEndPoint(IPAddress.Parse("124.248.33.21"), 1080);
client.Connect(ipPoint);
//第一步握手协议 Socket5 版本为5 需要验证
Socket5Client.sock5req1 req1= new Socket5Client.sock5req1();
req1.Ver = 5;
req1.nMethods = 1;
req1.Methods = 2;
SocketUtils.Send(client.Client, new byte[] { req1.Ver, req1.nMethods, req1.Methods });
//第一步握手协议服务器的应答
byte[] bufferAns1=new byte[2];
SocketUtils.Receive(client.Client, 2, out bufferAns1);
Socket5Client.sock5ans1 ans1 = new Socket5Client.sock5ans1();
ans1.Ver = bufferAns1[0];
ans1.Method = bufferAns1[1];
//Method为2时间,验证用户名密码
string userName = "test";
string passWord = "test";
if (ans1.Method == 2)
{
SocketUtils.Send(client.Client, new byte[] { (byte)passWord.Length, (byte)userName.Length });
}
byte[] userNameByte = ASCIIEncoding.ASCII.GetBytes(userName);
byte[] passWordByte = ASCIIEncoding.ASCII.GetBytes(passWord);
byte[] passWordLength = new byte[] { (byte)passWord .Length};
byte[] userNameAndPassWord= new byte[userNameByte.Length+passWordByte.Length+1];
userNameByte.CopyTo(userNameAndPassWord,0);
passWordLength.CopyTo(userNameAndPassWord, userNameByte.Length);
passWordByte.CopyTo(userNameAndPassWord,userNameByte.Length+1);
SocketUtils.Send(client.Client, userNameAndPassWord);
//获取验证结果bufferValidateUser[1]为0时验证通过
byte[] bufferValidateUser = new byte[2];
SocketUtils.Receive(client.Client, 2, out bufferValidateUser);
//通过代理服务器发送格式
IPEndPoint destIP = new IPEndPoint(IPAddress.Parse("124.248.33.21"), 1234);
string str ="通过代理客户端发上来的,哈哈哈!~~";
UnicodeEncoding unicode=new UnicodeEncoding();
byte[] msgBuffer= unicode.GetBytes(str);
byte[] data = new byte[10 + msgBuffer.Length];
data[0] = 5; data[1] = 1; data[2] = 0; data[3] = 1;//前4个字节
Array.Copy(destIP.Address.GetAddressBytes(), 0, data, 4, 4); //IP地址
Array.Copy(BitConverter.GetBytes(
IPAddress.HostToNetworkOrder(destIP.Port)), 2, data, 8, 2); //端口号
Array.Copy(msgBuffer, 0,data, 10, msgBuffer.Length);
SocketUtils.Send(client.Client, data);
byte[] sock5ans2 = new byte[6];
SocketUtils.Receive(client.Client, 6, out sock5ans2);
string str1 = "第二条,哈哈哈!~~";
byte[] msgBuffer1 = unicode.GetBytes(str1);
SocketUtils.Send(client.Client, msgBuffer1);
for (int i = 0; i < 100; i++)
{
string str2 = "再一条"+i.ToString();
System.Threading.Thread.Sleep(1000);
byte[] msgBuffer2 = unicode.GetBytes(str2);
SocketUtils.Send(client.Client, msgBuffer2);
}
就是最后这几句
for (int i = 0; i < 100; i++)
{
string str2 = "再一条"+i.ToString();
System.Threading.Thread.Sleep(1000);
byte[] msgBuffer2 = unicode.GetBytes(str2);
SocketUtils.Send(client.Client, msgBuffer2);
}
循环的时候能发上去头几条 输出结果为:“通过代理客户端发上来的,哈哈哈!~~第二条,哈哈哈!~~再一条0再一条1再一条2”
而不是循环到100这是什么问题??纳闷中 。。。