[工作小記]JAVA與C#的Socket通信
阿新 • • 發佈:2018-04-10
motion pmo sleep ddr trace ktr 不同的 ram target
在日常的開發中,不同的傳感器支持的開發語言常常是不同的。例如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; } } } }
[工作小記]JAVA與C#的Socket通信