麻烦问下这个效果在VB.net怎么实现?

行者无疆大道无垠 2018-01-20 11:44:33

麻烦问下大家,在VB.net中怎么实现如图所示效果。

就是我输入Hello World,然后选择TCP,输入接收方的IP地址,点击发送就能让对方收到。
我搜集了基本上所有的TCP/IP的案例和源码,发送后对方软件都不能识别。
只有这个packetsender发送后对方软件做出响应。而其他的数据包发送工具都不能使对方响应。
我分析可能是编码问题,但是不懂具体问题出现在哪儿。希望大家能够帮忙解决,万谢!
方案是和预警系统相连,发送指定文本到对方程序后,对方程序根据文本做出处理并推送到指定屏幕。
...全文
805 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 15 楼 chewinggum 的回复:
你在send之后延迟1秒再close试试
试了,延时1-5秒都试了,一样的。
  • 打赏
  • 举报
回复
引用 13 楼 Chen8013 的回复:
你“看到”别人的“数据包内容”了吗? 如果没看到,你凭什么能说是“同样的东西”……
packetsender是一个数据包收发工具,他是个开源的东西,用这个软件给对方软件发数据,他的可以,我的代码不行。
舉杯邀明月 2018-01-25
  • 打赏
  • 举报
回复
你“看到”别人的“数据包内容”了吗? 如果没看到,你凭什么能说是“同样的东西”……
脆皮大雪糕 2018-01-25
  • 打赏
  • 举报
回复
你在send之后延迟1秒再close试试
脆皮大雪糕 2018-01-24
  • 打赏
  • 举报
回复
你的那个截图只是说明:数据包发过去了,这里面隐含了一个就是你的TCP握手是成功的,但是截图里面并没有说对方有任何反馈。 你的代码同样的问题,建议你单步跟踪,第一步,在s.Connect后面查询一下socket状态确认TCP握手成功,然后再往服务端发数据。 最后,个人的判断,先确定一下这个服务是不是你自己写的测试服务。如果这个8080端口是一个Apache Tomcat web server或者代理服务器啥的,它肯定不会理会你的hello world.
脆皮大雪糕 2018-01-24
  • 打赏
  • 举报
回复
觉得是还没等对方反馈啥东西,你就close掉了……
  • 打赏
  • 举报
回复
引用 11 楼 chewinggum 的回复:
你的那个截图只是说明:数据包发过去了,这里面隐含了一个就是你的TCP握手是成功的,但是截图里面并没有说对方有任何反馈。 你的代码同样的问题,建议你单步跟踪,第一步,在s.Connect后面查询一下socket状态确认TCP握手成功,然后再往服务端发数据。 最后,个人的判断,先确定一下这个服务是不是你自己写的测试服务。如果这个8080端口是一个Apache Tomcat web server或者代理服务器啥的,它肯定不会理会你的hello world.
我截图所用的软件,点击发送后,对方程序会做出响应。 但是我用自己的代码发送,对方程序无任何变化。 我就是有点不明白,为什么同样的东西,不同的工具发送后效果不同呢。
赵4老师 2018-01-23
  • 打赏
  • 举报
回复
学会使用抓包软件wireshark
  • 打赏
  • 举报
回复
上面的代码测试了,对方程序不能响应。
  • 打赏
  • 举报
回复
Try
            Dim bytes(8080) As Byte
            Dim s = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
            Dim localEndPoint As New IPEndPoint(IPAddress.Parse("127.0.0.1"), 8080)
            s.Connect(localEndPoint)
            s.Send(Encoding.Unicode.GetBytes(TextBox1.Text))
            s.Send(Encoding.ASCII.GetBytes(TextBox1.Text))
            s.Close()
        Catch ex As Exception
            MsgBox(ex.ToString)
        End Try
8080端口开着,
netstat -aon| find "235"
TCP    0.0.0.0:8080            0.0.0.0:0              LISTENING       1468
  • 打赏
  • 举报
回复
用网络封包截取软件看看,对方这边是不是要在握手后确认一下正常。
X-i-n 2018-01-22
  • 打赏
  • 举报
回复
为什么会send两次? 不能用Encoding.Unicode.GetBytes(),这个是utf16,你监视一下byte数组就清楚了,是24字节的 应该用utf8,或者ascii。 删掉s.Send(Encoding.Unicode.GetBytes(TextBox1.Text)) 然后在s.Send(Encoding.ASCII.GetBytes(TextBox1.Text))打断点,netstat看一下有没有一个established状态的连接,或者直接监视s.connected。确定它建立了连接以后再继续往下走。照理这儿应该阻塞住直接到连接建立完成,或者异步等待连接建立完成以后回调connected方法。
舉杯邀明月 2018-01-21
  • 打赏
  • 举报
回复
我觉得问题的根源,根本就不是“语言”的问题…… 抓包,看看别人的“数据包封装格式”(也就是“协议”问题)吧! 你发送的数据包,不符合别人的“格式”,它“理你”才怪!!!
X-i-n 2018-01-21
  • 打赏
  • 举报
回复
编码问题不像,发送的内容都是英文字符,不管Encoding.UTF8还是Encoding.Default,转为Byte以后结果都是一样的。另外还有一个观察的方法,单起一个socket,然后指定好目标地址和端口,直接connect。除非对方会主动断开,不然就可以在netstat的结果里看到一个侦听,一个established连接。
X-i-n 2018-01-21
  • 打赏
  • 举报
回复
new一个socket,协议tcp,connect到127.0.0.1的8080,然后起一个线程异步处理DataReceive。 但是,不管你用什么语言开发,首先你要确定127.0.0.1的8080端口是开着的。打开cmd.exe,输入netstat -aon| find "8080",有显示为Listen的结果才行。 要是环境正常,还是上代码吧。
  • 打赏
  • 举报
回复
那我图中这个软件为什么可以用呢

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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