在asp网站上实现传输数据、下载数据接口,采用socket+xml方式进行数据传输的接口。我在服务器端收到客户端的信息后发送数据,这个时候sockeet是为null的,可能是响应了发送按钮事件页面刷新或者是socket连接后关闭。我想在发送数据的时候socket有对应的值,可以发送到客户端。有些急,希望知道的朋友能够帮忙!
我服务器端的代码是:
private void StartServerListenAndReceiveData()
{
try
{
//如果没有绑定则执行绑定当地终结点操作
if (!ServerSocket.IsBound)
{
//设置终结点
SetEndPoint(); ServerSocket.Bind(ServerEndPoint);
//开启监听
ServerSocket.Listen(20); listBox1.Items.Add(string.Format("成功开启监听({0}:{1})[{2}]", ServerEndPoint.Address, ServerEndPoint.Port, DateTime.Now.ToString())); ClientSocket = ServerSocket.Accept();
//txtclient.Text = ClientSocket.ToString();
} //接收数据开始
ServerReceiveData();
}
catch
{
Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "<script type='text/javascript' language='javascript' defer='defer'>alert('" + "开启监听" + ServerEndPoint.Address + ":" + ServerEndPoint.Port + "失败!请检查服务端IP地址是否配置正确。" + "');</script>");
}
} /// <summary>
/// 线程监听操作
/// </summary>
private void ThreadServerListen()
{
//接收数据线程
Thread ReceiveThread = new Thread(new ThreadStart(StartServerListenAndReceiveData)); //后台运行
ReceiveThread.IsBackground = true; //开启线程
ReceiveThread.Start();
} /// <summary>
/// 接收数据
/// </summary>
private void ServerReceiveData()
{
try
{
while (true)
{
Thread.Sleep(1);
byte[] bytes = new byte[ClientSocket.Available]; //接收数据
int butter = ClientSocket.Receive(bytes); if (butter > 0)
{
string strData = string.Format("{0}", Encoding.UTF8.GetString(bytes));//Encoding类中获取UTF8编码对象来进行编码转换,GetString从一个字节序列返回字符串,由此是用所选择的编码方式对字节序列进行解码。
listBox1.Items.Add(string.Format("[{0}][{1}]", ((IPEndPoint)ClientSocket.RemoteEndPoint).Address, DateTime.Now.ToString()));
listBox1.Items.Add(string.Format(" {0}", strData));
listBox1.SelectedIndex = listBox1.Items.Count - 1;
} //客户端SOCKET
ClientSocket = ServerSocket.Accept();
}
}
catch (Exception err)
{
throw err;
}
}
#endregion #region Client /// <summary>
/// 线程发送数据
/// </summary>
private void ThreadClientrSendData()
{
Thread thread = new Thread(new ThreadStart(ClientSendData));
thread.IsBackground = true;
thread.Priority = ThreadPriority.Highest;
thread.Start();
} /// <summary>
/// 发送数据
/// </summary>
private void ClientSendData()
{
if (string.IsNullOrEmpty(txtContent.Text.Trim()))
{
Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "<script type='text/javascript' language='javascript' defer='defer'>alert('" + "请填写发送信息" + "');</script>");
txtContent.Focus();
return;
}
try
{
if (ClientSocket == null)
{
//Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "<script type='text/javascript' language='javascript' defer='defer'>alert('" + "没有可用连接。" + "');</script>");
return;
} btnClientSend.Enabled = false;
btnClientSend.Text = "发送中...";
byte[] bytes = null; bytes = Encoding.UTF8.GetBytes(txtContent.Text.Trim()); //重新调整客户端端口号
ClientEndPoint = (IPEndPoint)ClientSocket.RemoteEndPoint;
ClientEndPoint = new IPEndPoint(ClientEndPoint.Address, CLIENT_END_POINT_PORT); Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); socket.Connect(ClientEndPoint); //向客户端发送数据
socket.Send(bytes);
socket.Close(); listBox1.Items.Add(string.Format("[{0}][{1}]", ((IPEndPoint)ServerSocket.LocalEndPoint).Address, DateTime.Now.ToString())); listBox1.Items.Add(string.Format(" {0}", txtContent.Text.Trim()));
listBox1.SelectedIndex = listBox1.Items.Count - 1; btnClientSend.Enabled = true;
btnClientSend.Text = "发送"; txtContent.Text = "";
txtContent.Focus();
}
catch(Exception ex)
{
throw ex;
}
}
//发送数据
public void btnClientSend_Click(object sender, EventArgs e)
{
ThreadClientrSendData();
}
我服务器端的代码是:
private void StartServerListenAndReceiveData()
{
try
{
//如果没有绑定则执行绑定当地终结点操作
if (!ServerSocket.IsBound)
{
//设置终结点
SetEndPoint(); ServerSocket.Bind(ServerEndPoint);
//开启监听
ServerSocket.Listen(20); listBox1.Items.Add(string.Format("成功开启监听({0}:{1})[{2}]", ServerEndPoint.Address, ServerEndPoint.Port, DateTime.Now.ToString())); ClientSocket = ServerSocket.Accept();
//txtclient.Text = ClientSocket.ToString();
} //接收数据开始
ServerReceiveData();
}
catch
{
Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "<script type='text/javascript' language='javascript' defer='defer'>alert('" + "开启监听" + ServerEndPoint.Address + ":" + ServerEndPoint.Port + "失败!请检查服务端IP地址是否配置正确。" + "');</script>");
}
} /// <summary>
/// 线程监听操作
/// </summary>
private void ThreadServerListen()
{
//接收数据线程
Thread ReceiveThread = new Thread(new ThreadStart(StartServerListenAndReceiveData)); //后台运行
ReceiveThread.IsBackground = true; //开启线程
ReceiveThread.Start();
} /// <summary>
/// 接收数据
/// </summary>
private void ServerReceiveData()
{
try
{
while (true)
{
Thread.Sleep(1);
byte[] bytes = new byte[ClientSocket.Available]; //接收数据
int butter = ClientSocket.Receive(bytes); if (butter > 0)
{
string strData = string.Format("{0}", Encoding.UTF8.GetString(bytes));//Encoding类中获取UTF8编码对象来进行编码转换,GetString从一个字节序列返回字符串,由此是用所选择的编码方式对字节序列进行解码。
listBox1.Items.Add(string.Format("[{0}][{1}]", ((IPEndPoint)ClientSocket.RemoteEndPoint).Address, DateTime.Now.ToString()));
listBox1.Items.Add(string.Format(" {0}", strData));
listBox1.SelectedIndex = listBox1.Items.Count - 1;
} //客户端SOCKET
ClientSocket = ServerSocket.Accept();
}
}
catch (Exception err)
{
throw err;
}
}
#endregion #region Client /// <summary>
/// 线程发送数据
/// </summary>
private void ThreadClientrSendData()
{
Thread thread = new Thread(new ThreadStart(ClientSendData));
thread.IsBackground = true;
thread.Priority = ThreadPriority.Highest;
thread.Start();
} /// <summary>
/// 发送数据
/// </summary>
private void ClientSendData()
{
if (string.IsNullOrEmpty(txtContent.Text.Trim()))
{
Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "<script type='text/javascript' language='javascript' defer='defer'>alert('" + "请填写发送信息" + "');</script>");
txtContent.Focus();
return;
}
try
{
if (ClientSocket == null)
{
//Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "<script type='text/javascript' language='javascript' defer='defer'>alert('" + "没有可用连接。" + "');</script>");
return;
} btnClientSend.Enabled = false;
btnClientSend.Text = "发送中...";
byte[] bytes = null; bytes = Encoding.UTF8.GetBytes(txtContent.Text.Trim()); //重新调整客户端端口号
ClientEndPoint = (IPEndPoint)ClientSocket.RemoteEndPoint;
ClientEndPoint = new IPEndPoint(ClientEndPoint.Address, CLIENT_END_POINT_PORT); Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); socket.Connect(ClientEndPoint); //向客户端发送数据
socket.Send(bytes);
socket.Close(); listBox1.Items.Add(string.Format("[{0}][{1}]", ((IPEndPoint)ServerSocket.LocalEndPoint).Address, DateTime.Now.ToString())); listBox1.Items.Add(string.Format(" {0}", txtContent.Text.Trim()));
listBox1.SelectedIndex = listBox1.Items.Count - 1; btnClientSend.Enabled = true;
btnClientSend.Text = "发送"; txtContent.Text = "";
txtContent.Focus();
}
catch(Exception ex)
{
throw ex;
}
}
//发送数据
public void btnClientSend_Click(object sender, EventArgs e)
{
ThreadClientrSendData();
}
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void Application_Start(object sender, EventArgs e)
{
// 这里你启动一个线程或计时器什么来永久保持socket的状态
}