关于asp.net的socket的通信问题求问!!!!!!!!!!有代码,帮忙看一下
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
public partial class _Default : System.Web.UI.Page
{
private Socket socket;
private Thread thread;
//private NetworkStream netStream;
protected void Page_Load(object sender, EventArgs e)
{
//this.TextBoxReceive.Text = "";
//this.TextBoxSend.Text = "";
//this.listBoxState.Items.Clear();
}
protected void buttonRequest_Click(object sender, EventArgs e)
{
//string ip = this.textBoxIP.Text;
//int port = Convert.ToInt32(this.textBoxPort.Text);
//int port = Int32.Parse(textBoxPort);
IPAddress ip = IPAddress.Parse(this.textBoxIP.Text);
IPEndPoint server = new IPEndPoint(ip,Int32.Parse(this.textBoxPort.Text));
socket = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
try
{
socket.Connect(server);
}
catch(Exception ee)
{
// Console.Write("与服务器连接失败!");
this.listBoxState.Items.Add(ee.Message);
return;
}
this.buttonRequest.Enabled = false;
this.listBoxState.Items.Add("与服务器连接成功");
thread = new Thread(new ThreadStart(AcceptMessage));
thread.Start();
}
private void AcceptMessage()
{
NetworkStream netStream = new NetworkStream(socket);
while (true)
{
try
{
byte[] datasize = new byte[4];
netStream.Read(datasize, 0, 4);
int size = System.BitConverter.ToInt32(datasize, 0);
Byte[] message = new byte[size];
int dataleft = size;
int start = 0;
while (dataleft > 0)
{
int recv = netStream.Read(message, start, dataleft);
start += recv;
dataleft -= recv;
}
this.TextBoxReceive.Text = System.Text.Encoding.Unicode.GetString(message);
}
catch
{
this.listBoxState.Items.Add("服务器断开连接");
break;
}
}
}
protected void buttonClose_Click(object sender, EventArgs e)
{
try
{
if (socket.Connected)
{
socket.Shutdown(SocketShutdown.Both);
socket.Close();
thread.Abort();
}
this.listBoxState.Items.Add("与主机断开连接");
}
catch (Exception err)
{
this.listBoxState.Items.Add(err.Message);
}
this.buttonRequest.Enabled = true;
}
protected void buttonSend_Click(object sender, EventArgs e)
{
string str = this.TextBoxSend.Text;
//string str = TextBoxSend.Text;
int i = str.Length;
if (i == 0)
{
return;
}
else
{
i *= 2;
}
byte[] datasize = new byte[4];
datasize = System.BitConverter.GetBytes(i);
byte[] sendbytes = System.Text.Encoding.Unicode.GetBytes(str);
//byte[] sendbytes = System.Text.Encoding.Default.GetBytes(str);
//Byte[] sendbytes = new Byte[64];
//sendbytes = System.Text.Encoding.Unicode.GetBytes(str.ToCharArray());
//Byte[] sendbytes = System.Text.Encoding.Unicode.GetBytes(str.ToCharArray());
NetworkStream netStream = new NetworkStream(socket);
try
{
//NetworkStream netStream = new NetworkStream(socket);
netStream.Write(datasize, 0, 4);
netStream.Write(sendbytes, 0, sendbytes.Length);
netStream.Flush();
this.TextBoxSend.Text = "";
//socket.Send(sendbytes,sendbytes.Length,SocketFlags.None);
}
/* try
{
//TcpClient client=new TcpClient();
//NetworkStream netStream=client.GetStream();
//string send=this.TextBoxSend.Text;
//byte[] message=System.Text.Encoding.BigEndianUnicode.GetBytes(send.ToCharArray());
//netStream.Write(message,0,message.Length);
//netStream.Flush();
//socket.Send(sendbytes,sendbytes.Length,0);
}*/
catch(Exception ee)
{
this.listBoxState.Items.Add(ee.Message);
}
}
}
这是一个asp.net开发的和第三方socket通信的客户端原代码,
在有颜色字体处总报错,服错如下:
值不能为空。
参数名: socket
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息: System.ArgumentNullException: 值不能为空。
参数名: socket
源错误:
行 130: //sendbytes = System.Text.Encoding.Unicode.GetBytes(str.ToCharArray());
行 131: //Byte[] sendbytes = System.Text.Encoding.Unicode.GetBytes(str.ToCharArray());
行 132: NetworkStream netStream = new NetworkStream(socket);
行 133:
行 134: try