【初学者求教】Socket编程

OROCHIORI579 2010-05-25 05:50:25
发送数据出去了,但是没有收到数据,暂时先不考虑我发送的格式是否正确,只是请大家帮忙看下除了发送数据部分,其他部分写的是否正确(关键是本地绑定的IP和端口和目标地址和端口这样写有没有冲突),代码如下—>

using System.Net;
using System.Net.Sockets;

namespace BACnetClient
{
public partial class Form1 : Form
{
Socket bacnet_master_socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
IPEndPoint ipep = new IPEndPoint(IPAddress.Parse("219.142.59.82"), 5022);//目标端口

public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
IPEndPoint local_ipep = new IPEndPoint(IPAddress.Parse("192.168.0.24"), 5022);// 绑定端口,192.168.0.24为本地IP

bacnet_master_socket.Bind(local_ipep);
bacnet_master_socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, true);
}

private void btn_Device_FirmwareRevision_Click(object sender, EventArgs e)
{
/***************发送*********************************/
byte[] data = new byte[1024];
data[0] = Convert.ToByte('L');
data[1] = Convert.ToByte('R');
data[2] = Convert.ToByte('|');
data[3] = Convert.ToByte('R');
data[4] = Convert.ToByte('I');
data[5] = Convert.ToByte('G');
data[6] = Convert.ToByte('I');
data[7] = Convert.ToByte('|');
data[8] = Convert.ToByte('F');
data[9] = Convert.ToByte('L');
data[10] = Convert.ToByte('R');
data[11] = Convert.ToByte('N');
data[12] = Convert.ToByte('G');
data[13] = Convert.ToByte('#');
data[14] = Convert.ToByte('G');
data[15] = Convert.ToByte('N');
data[16] = Convert.ToByte('G');
data[17] = Convert.ToByte('L');
data[18] = Convert.ToByte('G');
data[19] = Convert.ToByte('V');
data[20] = Convert.ToByte('G');
data[21] = Convert.ToByte('G');
data[22] = Convert.ToByte('G');
data[23] = Convert.ToByte('S');
data[24] = Convert.ToByte('S');
data[25] = Convert.ToByte('F');
data[26] = Convert.ToByte('|');

try
{
bacnet_master_socket.SendTo(data, (int)27, SocketFlags.None, ipep);
}
catch (SocketException)
{
System.Windows.Forms.MessageBox.Show("Either the network cable is unplugged, or there is no configured Ethernet Port on this computer");
return;
}

/********************************接收***************************************/
byte[] received = new byte[1024];
//int recv = bacnet_master_socket.ReceiveFrom(received, ref tmpRemote);
int recv = bacnet_master_socket.Receive(received);

/********************************************接收******************************************/
string result = "";//设置断点

System.Windows.Forms.MessageBox.Show(result);
}
}
}


希望高手指点,万分感激!!!!!
...全文
150 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
OROCHIORI579 2010-05-26
  • 打赏
  • 举报
回复
感谢各位回帖!
OROCHIORI578 2010-05-25
  • 打赏
  • 举报
回复
先回家了
wuyq11 2010-05-25
  • 打赏
  • 举报
回复
byte[] buffer = new byte[1024];
socket.Receive(buffer);
处理客户端的请求并回应客户端
string message = "";
byte[] outbytes = System.Text.Encoding.ASCII.GetBytes(message.ToCharArray());
socket.Send(outbytes, message.Length, 0);

SOCKET通讯总结
a124819202 2010-05-25
  • 打赏
  • 举报
回复
借宝地问个问题!
心跳任务是干什么用的? 是不是要在开个线程用于保持心跳
捷哥1999 2010-05-25
  • 打赏
  • 举报
回复

try
{
//在发送之前首先要连接的!
bacnet_master_socket.Connect(ipep);
if(bacnet_master_socket.Connected)
bacnet_master_socket.SendTo(data, (int)27, SocketFlags.None, ipep);
}

皇城龙三 2010-05-25
  • 打赏
  • 举报
回复
应该先测试一下链路的状况

可以用c#来实现ping的方法进行测试

public string sPing(string IP)
{
Ping pingSender = new Ping();
PingOptions options = new PingOptions();
options.DontFragment = true;
string data = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
byte[] buffer = Encoding.ASCII.GetBytes(data);
int timeout = 1200;

PingReply reply = pingSender.Send(IP, timeout, buffer, options);
if (reply.Status == IPStatus.Success)
{


string sPing;

sPing = "网络正常";


return sPing;


}
else
{
return "网络不通";

}





}
OROCHIORI580 2010-05-25
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 lianshaohua 的回复:]
先抓包看看有没有发到网络上吧:Wireshark很好用的工具
[/Quote]
下载了 不太会用 我现在想知道链接没连接上 应该如何判断
ztenv 2010-05-25
  • 打赏
  • 举报
回复
先抓包看看有没有发到网络上吧:Wireshark很好用的工具

111,125

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧