我在实习中需要编写个调用其他软件中的数据,数据为tagid,x,y,z,time.然后把这个坐标利用程序meaage部分的已知量theta,a,b,c换成GPS坐标输出,但是写来写去总是不对,我已经快好几天没睡觉了,感觉自己水平很烂,对自己失去了信心,所以真心请教前辈。请那位大大给我看看程序,纠正一下,小弟跪拜!!
程序分为server,client和message。
Server为:
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Net;
using System.Net.Sockets;using Star.UBase;
using Star.ULocation;
using Star.ULocation.CellData;
namespace UAtlas
{
class UAtlasServer
{
static UbiBuffer buffer = null; static void Main(string[] args)
{
TcpListener server = null;
TcpClient client = null; // create multicell object and load all Star cells
MultiCell multicell = new MultiCell();
SortedDictionary<string, Cell> cells = multicell.GetAvailableCells();
foreach (Cell _cell in cells.Values)
multicell.LoadCell(_cell, true);
using (Star.ULocation.CellData.ReadTransaction xact = multicell.Schema.ReadTransaction())
{
foreach (Star.ULocation.CellData.Location.RowType row in Star.ULocation.CellData.Location.object_(xact))
{
Star.UBase.UObject obj = row.object_; // If the object is a tag, return the tag id as the name.
Star.ULocationIntegration.Tag tag = new Star.ULocationIntegration.Tag();
tag.Narrow(obj);
}
}
Star.ULocation.CellData.Location.AddUpdateHandler(multicell.Schema, CellData_Update);
//Star.ULocation.CellData.Location.AddUpdateHandler(multicell.Schema, TestCellData_Update); try
{
IPHostEntry myIpHostEntry = Dns.GetHostEntry(Dns.GetHostName());
IPAddress ipAdress = myIpHostEntry.AddressList[0];
string portStr = args[0];
int port = Int32.Parse(portStr);
IPEndPoint serverAddr = new IPEndPoint(ipAdress, port);
Console.WriteLine("Listen at {0}", serverAddr);
// TcpListener server = new TcpListener(port);
server = new TcpListener(serverAddr); // Start listening for client requests.
server.Start(); // Buffer for reading data
Byte[] bytes = new Byte[1024]; // Enter the listening loop.
while (true)
{
Console.Write("Waiting for a connection... "); // Perform a blocking call to accept requests.
client = server.AcceptTcpClient();
Console.WriteLine("Connected!"); // Get a stream object for reading and writing
NetworkStream stream = client.GetStream(); try
{ buffer = new UbiBuffer(100); Console.WriteLine("Start loop..."); while (true)
{
if (buffer.Count == 0)
{
System.Threading.Thread.Sleep(25);
continue;
}
UAtlasMessage message = (UAtlasMessage)buffer.Next(); byte[] msg = System.Text.Encoding.ASCII.GetBytes(message.MessageString()); //Console.WriteLine(message);
Console.Write("."); // Send back a response.
stream.Write(msg, 0, msg.Length);
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
buffer = null;
// Shutdown and end connection
client.Close();
}
Console.WriteLine("...end of loop");
}
}
catch (SocketException e)
{
Console.WriteLine("SocketException: {0}", e);
}
finally
{
// Stop listening for new clients.
server.Stop();
}
} static void CellData_Update(Location.RowType old_row, Location.RowType new_row)
{
//Console.WriteLine("Got an update for {0}", new_row.object_.Id);
if (buffer == null)
return; Star.UBase.UObject obj = new_row.object_; // If the object is a tag, return the tag id as the name.
Star.ULocationIntegration.Tag tag = new Star.ULocationIntegration.Tag();
tag.Narrow(obj);
if (!tag.Nil())
{
string id = Star.ULocationIntegration.Tag.ConvertIdToString(tag.PhysicalId, '-');
Vector3D P = new_row.position_.P;
UAtlasMessage message = new UAtlasMessage(id, P.X, P.Y, P.Z, new_row.time_);
try
{
buffer.Add(message);
}
catch
{
}
}
}
static void TestCellData_Update(Location.RowType old_row, Location.RowType new_row)
{
if (buffer == null)
return; Star.UBase.UObject obj = new_row.object_; string id = obj.Id.ToString();
Vector3D P = new_row.position_.P;
UAtlasMessage message = new UAtlasMessage(id, P.X, P.Y, P.Z, new_row.time_);
try
{
buffer.Add(message);
}
catch
{
}
}
}
}
程序分为server,client和message。
Server为:
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Net;
using System.Net.Sockets;using Star.UBase;
using Star.ULocation;
using Star.ULocation.CellData;
namespace UAtlas
{
class UAtlasServer
{
static UbiBuffer buffer = null; static void Main(string[] args)
{
TcpListener server = null;
TcpClient client = null; // create multicell object and load all Star cells
MultiCell multicell = new MultiCell();
SortedDictionary<string, Cell> cells = multicell.GetAvailableCells();
foreach (Cell _cell in cells.Values)
multicell.LoadCell(_cell, true);
using (Star.ULocation.CellData.ReadTransaction xact = multicell.Schema.ReadTransaction())
{
foreach (Star.ULocation.CellData.Location.RowType row in Star.ULocation.CellData.Location.object_(xact))
{
Star.UBase.UObject obj = row.object_; // If the object is a tag, return the tag id as the name.
Star.ULocationIntegration.Tag tag = new Star.ULocationIntegration.Tag();
tag.Narrow(obj);
}
}
Star.ULocation.CellData.Location.AddUpdateHandler(multicell.Schema, CellData_Update);
//Star.ULocation.CellData.Location.AddUpdateHandler(multicell.Schema, TestCellData_Update); try
{
IPHostEntry myIpHostEntry = Dns.GetHostEntry(Dns.GetHostName());
IPAddress ipAdress = myIpHostEntry.AddressList[0];
string portStr = args[0];
int port = Int32.Parse(portStr);
IPEndPoint serverAddr = new IPEndPoint(ipAdress, port);
Console.WriteLine("Listen at {0}", serverAddr);
// TcpListener server = new TcpListener(port);
server = new TcpListener(serverAddr); // Start listening for client requests.
server.Start(); // Buffer for reading data
Byte[] bytes = new Byte[1024]; // Enter the listening loop.
while (true)
{
Console.Write("Waiting for a connection... "); // Perform a blocking call to accept requests.
client = server.AcceptTcpClient();
Console.WriteLine("Connected!"); // Get a stream object for reading and writing
NetworkStream stream = client.GetStream(); try
{ buffer = new UbiBuffer(100); Console.WriteLine("Start loop..."); while (true)
{
if (buffer.Count == 0)
{
System.Threading.Thread.Sleep(25);
continue;
}
UAtlasMessage message = (UAtlasMessage)buffer.Next(); byte[] msg = System.Text.Encoding.ASCII.GetBytes(message.MessageString()); //Console.WriteLine(message);
Console.Write("."); // Send back a response.
stream.Write(msg, 0, msg.Length);
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
buffer = null;
// Shutdown and end connection
client.Close();
}
Console.WriteLine("...end of loop");
}
}
catch (SocketException e)
{
Console.WriteLine("SocketException: {0}", e);
}
finally
{
// Stop listening for new clients.
server.Stop();
}
} static void CellData_Update(Location.RowType old_row, Location.RowType new_row)
{
//Console.WriteLine("Got an update for {0}", new_row.object_.Id);
if (buffer == null)
return; Star.UBase.UObject obj = new_row.object_; // If the object is a tag, return the tag id as the name.
Star.ULocationIntegration.Tag tag = new Star.ULocationIntegration.Tag();
tag.Narrow(obj);
if (!tag.Nil())
{
string id = Star.ULocationIntegration.Tag.ConvertIdToString(tag.PhysicalId, '-');
Vector3D P = new_row.position_.P;
UAtlasMessage message = new UAtlasMessage(id, P.X, P.Y, P.Z, new_row.time_);
try
{
buffer.Add(message);
}
catch
{
}
}
}
static void TestCellData_Update(Location.RowType old_row, Location.RowType new_row)
{
if (buffer == null)
return; Star.UBase.UObject obj = new_row.object_; string id = obj.Id.ToString();
Vector3D P = new_row.position_.P;
UAtlasMessage message = new UAtlasMessage(id, P.X, P.Y, P.Z, new_row.time_);
try
{
buffer.Add(message);
}
catch
{
}
}
}
}
解决方案 »
- 什么是图片打包
- DataTimePicker有默认值在查询条件里
- 在C#中类的设计中我想实现和定义分开,就像C++一样,如何实现??
- 做了一个点对点传输信息的小程序,用TcpClient,可是传到对方那信息老变成乱码。
- 恳求一篇 企业网站设计 毕业论文 分数不够再给
- 如何在WinForm中实现HTTP服务,例如,提供回应Get或Pos等请求,WaitFor高手
- 这个,用面向对象的方法如何实现?
- 有自动增长列的表如何用dataAdaper的update()方法修改数据?
- WPF 如何在DataGrid中根据一个单元格的值去禁用掉另一个单元格的button
- 在.NET2.0中打印控件怎么使用(C#)?
- 把查询的结果显示在datagridview并在datagridview修改、删除保存到数据库
- C# cmd.exe问题
Client部分using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Runtime.InteropServices;
namespace UAtlas
{
class UAtlasClient
{
static void Main(string[] args)
{
if (args.Length < 1)
{
Console.WriteLine("Usage: UAtlasClient <Server-IP>");
return;
} try
{
IPAddress serverIP = IPAddress.Parse(args[0]);
IPHostEntry myIpHostEntry = Dns.GetHostEntry(serverIP);
IPEndPoint server = new IPEndPoint(myIpHostEntry.AddressList[0], Int32.Parse(args[1]));
// Console.WriteLine("Trying to connect to {0}",server);
// Create a TcpClient.
TcpClient client = new TcpClient();
client.Connect(server); // Get a client stream for reading and writing.
NetworkStream stream = client.GetStream(); // Buffer to store the response bytes.
Byte[] data = new Byte[1024]; // String to store the response ASCII representation.
string responseData = string.Empty; try
{
while (true)
{
Int32 bytes = stream.Read(data, 0, data.Length);
responseData = System.Text.Encoding.ASCII.GetString(data, 0, bytes);
UAtlasMessage message = new UAtlasMessage(responseData); //Console.WriteLine("{0}", message);
// Console.WriteLine("Received: {0}", message);
Console.WriteLine("{0}", message);
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
// //Console.WriteLine();
// //Console.WriteLine(ex.StackTrace);
} // Close everything.
stream.Close();
client.Close();
}
catch (ArgumentNullException e)
{
Console.WriteLine("ArgumentNullException: {0}", e);
}
catch (SocketException e)
{
Console.WriteLine("SocketException: {0}", e);
}
}
}
}
message部分using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Globalization;namespace UAtlas
{
public class UAtlasMessage
{
static NumberFormatInfo fi = new NumberFormatInfo();
public char Header = 'R';
public string TagID;
public double X;
public double Y;
public double Z;
public int BatteryStatus = 13;
public int Timestamp;
public int Unit = 1; //public int diff;
public UAtlasMessage()
{
} public UAtlasMessage(string tagid, double x, double y, double z, int diff, DateTime time)
{
TagID = tagid;
double theta = 1.8;
double a = 398169.59;
double b = 5707122;
double c = 131;
double x0 = x;
double y0 = y;
double z0 = z;
X = (Math.Cos(theta))*x0-Math.Sin(theta)*y0+a;
Y = (Math.Sin(theta))*x0+Math.Cos(theta)*y0+b;
Z = z0 + c;
//Timestamp = ConvertDateTime(time);
Timestamp = diff;
} public UAtlasMessage(string message)
{
string[] components = message.Split(new char [] {','});
TagID = components[0];
X = Convert.ToDouble(components[1], fi);
Y = Convert.ToDouble(components[2], fi);
Z = Convert.ToDouble(components[3], fi);
Timestamp = Convert.ToInt32(components[4],fi);
} private static int ConvertDateTime(DateTime time)
{
DateTime baseTime = DateTime.Parse("01.11.2010 00:00:00");
TimeSpan diff = time.Subtract(baseTime);
return (int)diff.TotalMilliseconds;
}
/*
private static DateTime ConvertUTCTime(int time)
{
DateTime baseTime = DateTime.Parse("1/11/2010 0:0:0");
TimeSpan diff = new TimeSpan(0, 0, time);
return baseTime + diff;
}
*/
public override string ToString()
{
return String.Format("{0}", MessageString());
// return String.Format("(\"{0}\")", MessageString());
//return String.Format("TimeSyncCommand(\"{0}\")", MessageString());
}
public string MessageString()
{
return String.Format(fi, "{0},{1},{2:0.00},{3:0.00},{4}", TagID, X, Y, Z, Timestamp);
}
}
}
public UAtlasMessage(string tagid, double x, double y, double z, int diff, DateTime time)参数个数对吗,我没眼花吧