功能要实现发送一串命令行给服务器(硬件),返回我要数据,但是为什么我send后 再receive一直等待阻塞状态。请朋友们帮帮忙。string strMasterHostIP = "192.168.1.254";
if (TCPIPConnect(strMasterHostIP) == true)
{
this.button1.Enabled = false; Socket m_Socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
int port = Convert.ToInt32(5202);
string host = strMasterHostIP.ToString();
IPAddress ip = IPAddress.Parse(host);
IPEndPoint ipe = new IPEndPoint(ip, port);
m_Socket.Connect(ipe);
string s = "7E7E7E03000000061A83005A0D";
byte[] buffer = new byte[s.Length / 2];
for (int i = 0; i < buffer.Length; i++)
{
buffer[i] = byte.Parse(s.Substring(i * 2, 2), System.Globalization.NumberStyles.AllowHexSpecifier);
} try
{
int i = m_Socket.Send(buffer);
//声明接收返回内容的字符串
string recvStr = ""; //声明字节数组,一次接收数据的长度为1024字节
byte[] recvBytes = new byte[1024];
//返回实际接收内容的字节数
int bytes = 0;
//循环读取,直到接收完所有数据
while (true)
{
bytes = m_Socket.Receive(recvBytes, recvBytes.Length, 0);
//读取完成后退出循环
if (bytes <= 0)
break;
}
if (TCPIPConnect(strMasterHostIP) == true)
{
this.button1.Enabled = false; Socket m_Socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
int port = Convert.ToInt32(5202);
string host = strMasterHostIP.ToString();
IPAddress ip = IPAddress.Parse(host);
IPEndPoint ipe = new IPEndPoint(ip, port);
m_Socket.Connect(ipe);
string s = "7E7E7E03000000061A83005A0D";
byte[] buffer = new byte[s.Length / 2];
for (int i = 0; i < buffer.Length; i++)
{
buffer[i] = byte.Parse(s.Substring(i * 2, 2), System.Globalization.NumberStyles.AllowHexSpecifier);
} try
{
int i = m_Socket.Send(buffer);
//声明接收返回内容的字符串
string recvStr = ""; //声明字节数组,一次接收数据的长度为1024字节
byte[] recvBytes = new byte[1024];
//返回实际接收内容的字节数
int bytes = 0;
//循环读取,直到接收完所有数据
while (true)
{
bytes = m_Socket.Receive(recvBytes, recvBytes.Length, 0);
//读取完成后退出循环
if (bytes <= 0)
break;
}
一般异步方法都会带有Begin或End
建议用异步。。
m_Socket.BeginSend(buffer, 0, buffer.Length, SocketFlags.None, new AsyncCallback(OnSend), null);
byte[] recvBytes = new byte[20];
m_Socket.BeginReceive(recvBytes, 0, recvBytes.Length, SocketFlags.None, new AsyncCallback(OnReceive), null);
private void OnSend(IAsyncResult ar)
{
try
{
m_Socket.EndSend(ar);
}
catch (ObjectDisposedException)
{ }
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Send: " , MessageBoxButtons.OK, MessageBoxIcon.Error);
}
} private void OnReceive(IAsyncResult ar)
{
try
{
m_Socket.EndReceive(ar);
}
catch (ObjectDisposedException)
{ }
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Receive: ", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
Send能执行AsyncCallback(OnSend),AsyncCallback(OnReceive) 没有执行
1、服务端启动监听
2、客户端发起连接请求
3、服务端接受连接请求,创建连接完毕
4、客户端发送数据
5、服务端接收数据。
按照你所说的情况,很可能就根本没有正确连接上。另外一种可能就是,对方使用的未必是TCP协议,作为智能电表,很可能使用的是UDP协议。