[工作小记]JAVA与C#的Socket通信

在日常的开发中,不同的传感器支持的开发语言常常是不同的。例如Kinect一般是用C++开发的,Leapmotion用JAVA开发比较多。

去年暑假(17年暑假)做的一个项目是:用Leapmotion捕捉人手的五个手指关节信息,然后经过变换,传输给一个同样具有五个手指的机械手。

一开始拿到的开发框架,Leapmotion是用JAVA开发的;机械手AR10是用C#开发。

于是分别通过编程实现,使得JAVA端能够使Leapmotion捕捉人手五个手指10个关节的信息并保存为文本文件;

C#端能够使AR10读取文本文件,转化为各个关节的位置指令,实现同样的动作指令。

然而这样只能做到离线控制,需要通过Socket通信,实现数据的实时传输,才能实现控制。

JAVA端添加的代码:

在一开始添加库:

import java.net.ServerSocket;
import java.net.Socket;

在类里面添加(其中tmp是需要不断被实时发送的数据):

tmp = angleThumb12+" "+angleThumb23+" "+angleIndex01+" "+angleIndex12+" "+angleMiddle01+" "+angleMiddle12+" "+angleRing01+" "+angleRing12+" "+anglePinky01+" "+anglePinky12+" "+"\n";System.out.println("Java Sockets Program has started.");
int i=0;
try {
      DatagramSocket socket = new DatagramSocket();
      System.out.println("Sending the udp socket...");
      // Send the Message "HI"
      socket.send(toDatagram("",InetAddress.getByName("127.0.0.1"),3800));
      //while (true) {
      System.out.println(tmp);
      System.out.println("Sending hi " + i);
      Thread.currentThread();
      Thread.sleep(10);
      socket.send(toDatagram(String.valueOf(tmp),InetAddress.getByName("127.0.0.1"),3800));
      i++;
       } catch (Exception e) {
         e.printStackTrace();
                             }

C#端添加的代码

添加包含头文件:

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

在C#制作的GUI界面中需要触发接收数据的按钮下,例如

private void button1_Click(object sender, EventArgs e)
{

}

里面添加:

      private void button1_Click(object sender, EventArgs e)
        {

            string returnData;
            byte[] receiveBytes;
            //ConsoleKeyInfo cki = new ConsoleKeyInfo();
            using (UdpClient udpClient =
                new UdpClient(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 3800)))
            {
                IPEndPoint remoteIpEndPoint =
                    new IPEndPoint(IPAddress.Parse("127.0.0.1"), 3800);

                while (true)
                {
                    receiveBytes = udpClient.Receive(ref remoteIpEndPoint);
                    returnData = Encoding.ASCII.GetString(receiveBytes);
                    textBox1.AppendText(returnData + Environment.NewLine);
                    //Console.WriteLine(returnData);
                    float angle1 = 0;
                    float angle2 = 0;
                    float angle3 = 0;
                    float a0 = 0;
                    float a1 = 0;
                    float a2 = 0;
                    float a3 = 0;
                    float a4 = 0;
                    float a5 = 0;
                    float a6 = 0;
                    float a7 = 0;
                    float a8 = 0;
                    float a9 = 0;
                    int k = 0;

                    string[] arr = new string[10];
                    arr = returnData.Split(new char[] { ‘ ‘ }, StringSplitOptions.RemoveEmptyEntries);
                    foreach (string i in arr)
                    {
                        mainTextBox.AppendText("target: " + k + "s" + i + "s" + Environment.NewLine);
                        if (k == 1)
                        {
                            angle1 = Convert.ToSingle(i);
                            angle2 = angle1 * (-20) + 2219;
                            if (angle2 < 1621)
                            {
                                angle2 = 1621;
                            }
                            if (angle2 > 2000)
                            {
                                angle2 = 2000;
                            }
                            angle3 = angle2 * 4;
                            a1 = angle2;
                            TrySetTarget((byte)11, (ushort)angle3);
                        }
                //.........//if (k == 9)
                        {
                            angle1 = Convert.ToSingle(i);
                            angle2 = angle1 * (-16) + 2252;
                            if (angle2 < 992)
                            {
                                angle2 = 992;
                            }
                            if (angle2 > 2000)
                            {
                                angle2 = 2000;
                            }
                            angle3 = angle2 * 4;
                            a9 = angle2;
                            TrySetTarget((byte)12, (ushort)angle3);
                        }
                        k = k + 1;
                    }
                }
            }
        }

原文地址:https://www.cnblogs.com/youngsea/p/8764123.html

时间: 2024-11-05 18:50:17

[工作小记]JAVA与C#的Socket通信的相关文章

Java 和 Python 的 Socket 通信

网络上两个程序通过一个双向通讯连接实现数据的交换,这个双向链路的一端称为一个Socket.Socket支持的协议有多种,这里主要介绍基于 TCP/IP 协议族的 Socket 编程. 首先,IP协议族决定了socket的地址类型,在通信中必须采用对应的地址.AF_INET(AF 表示 Adress Family)表示要用 ipv4 地址(32位)与端口号(16位)的组合. 然后,根据传输协议又分为:流式 Socket(SOCK_STREAM) 和数据报式 Socket(SOCK_DGRAM):

[java]基于UDP的Socket通信Demo

java课编程作业:在老师给的demo的基础上实现客户端发送数据到服务器端,服务器端接受客户端后进行数据广播. 整体功能类似于聊天室,代码部分不是太难,但是在本机测试的时候出现这样的问题: 服务端通过将每一个Socket客户端的IP存入Set集合,每次接受到数据后都向当前所有的IP转发.但是本机演示的时候所有开的ChatClient客户端都是同一IP,怎么测试呢? 解决办法就是本机测试时候服务端向多个不同的端口转发就好了,这样跑起来的客户端是在不同端口上进行监听的(只是为了实现广播,实际应用下还

Java网络编程之Socket通信(二)

之前在前面已经介绍了Socket通信的一些基本原理,以及如何让客户端与服务器端建立通信,和实现通信的一些基本步骤(包括首先使得服务器端与客户端建立连接,建立连接之后,服务器端开始侦听客户端的请求,侦听到客户端的请求之后,通过输入输出流处理相关信息实现通信,最后通信完毕结束通信等一系列流程). 但是之前只是单个客户端与服务器进行通信,而我们实际应用中单个客户端的情况几乎不存在,都是多个客户端同时与服务器进行交互(这里同时交互就会出现并发性的问题,对于并发性的问题暂时还不是很懂,只知道有这个概念),

我看不下去鸟。。。。Java和C#的socket通信真的简单吗?

这几天在博客园上看到好几个写Java和C#的socket通信的帖子.但是都为指出其中关键点. C# socket通信组件有很多,在vs 使用nuget搜索socket组件有很多类似的.本人使用的是自己开发的一套组件. Java socket通信的组件也有很多,常用的大多数都是用的mina或者netty.游戏行业使用也是居多. 关于socket的底层写法,实在太多,我就不在BB. 这里我想说,C#和C++或者叫VC++把是使用小端序作为字节序.而java使用的是大端序作为字节序. 也就是说比如一个

Java和C#的socket通信相关(转)

这几天在博客园上看到好几个写Java和C#的socket通信的帖子.但是都为指出其中关键点. C# socket通信组件有很多,在vs 使用nuget搜索socket组件有很多类似的.本人使用的是自己开发的一套组件. Java socket通信的组件也有很多,常用的大多数都是用的mina或者netty.游戏行业使用也是居多. 关于socket的底层写法,实在太多,我就不在BB. 这里我想说,C#和C++或者叫VC++把是使用小端序作为字节序.而java使用的是大端序作为字节序. 也就是说比如一个

Java实现简单的socket通信

今天学习了一下java如何实现socket通信,感觉难点反而是在io上,因为java对socket封装已经很完善了. 今天代码花了整个晚上调试,主要原因是io的flush问题和命令行下如何运行具有package的类,不过最后问题基本都解决了,把代码贴出来供大家参考 server public class TcpServer { public static void main(String[] args) throws Exception { ServerSocket server = new S

Java和C++通过Socket通信中文乱码的解决

理想的开发状态是我开始就是C开发,一直是C的开发,现在还是C的开发,若干年后,幸运的话,我可以成为C语言的高手或者专家…… 更实际的情况是我开始是C开发,后来变成了JAVA开发,然后又做起了VC++的开发,几年下来,发现自己几乎一无所长,成为了编程界的万金油,这种产物很重要,但是也比较尴尬. 前一段时间我用C开发了一个服务器程序,前端是VC开发的客户端. 现在我用JAVA开发了一个类似的服务器程序,前端依然是VC开发的客户端,运行时发现,中文乱码了. 先说说我的问题场景,很常见: 1 VC++客

基于Java NIO的Socket通信

Java NIO模式的Socket通信,是一种同步非阻塞IO设计模式,它为Reactor模式实现提供了基础. 下面看看,Java实现的一个服务端和客户端通信的例子. NIO模式的基本原理描述如下: 服务端打开一个通道(ServerSocketChannel),并向通道中注册一个选择器(Selector),这个选择器是与一些感兴趣的操作的标识(SelectionKey,即通过这个标识可以定位到具体的操作,从而进行响应的处理)相关联的,然后基于选择器(Selector)轮询通道(ServerSock

java 和 C++ Socket通信(java作为服务端server,C++作为客户端client,解决中文乱码问题GBK和UTF8)

原文链接: http://www.cnblogs.com/kenkofox/archive/2010/04/25/1719649.html 代码: http://files.cnblogs.com/kenkofox/Client-CPlusPlus.rarhttp://files.cnblogs.com/kenkofox/Server_Java.rar java和C++使用Socket通信,其实底层Socket都是相通的,所以只需要按照各自的语法去做就是了. java服务器端使用ServerSo