在SOCKET传输数组中,我把DATASAT序列后传送,但是如果我的DATASAT序列号后的字节大于接受端得缓存byte[],该怎么处理比较好。
解决方案 »
- 读取pdf文件并显示
- dataGridView問題
- 如何求一个数组内实际内容大小?
- ado时代,程序中可以很容易的调用“建立连接”的对话框,ado.net时代如何实现啊
- 请教高手一个Socket传输任何大小文件的问题!!!!
- 我想图形化工作流定义,大家一起来讨论思路阿
- winform下,datagrid结合扫描枪定位问题
- C# WINFORM datagridview checkbox问题
- 请问,如何在一个页面中使用另一个页面中的控件?
- 给80分了,哪位告诉我一个安装.net的秘匙,给分喽!!!急用,谢了!!!
- WInform MDI父窗体 菜单 调用子窗体事件
- 怎样设置C#生成word文档中表格的宽度
System.IO.MemoryStream stream=new System.IO.MemoryStream();
stream.Write(bytes, 0, bytes.Length );
stream.Close(); 比如缓冲是100字节下一次偏移量就是100
stream.Write(bytes, 100, bytes.Length );
你发送多大数据不够用啊?
大于tcp的一帧?
然后反序列化MemoryStream里面的数据.
{
IPHostEntry tempHost = new IPHostEntry();
tempHost = Dns.Resolve(ip);
if (tempHost.AddressList.Length == 1)
{
return tempHost.AddressList[0];
}
else
{
return tempHost.AddressList[1];
}
} private void clientListen()
{
try
{
if (!base.IsDisposed)
{
serverDnsName = textBox3.Text.Trim().ToUpper().Replace("TCP://", "");
serverPort = int.Parse(textBox4.Text.Trim());
IPHostEntry resolvedServer = Dns.GetHostEntry(serverDnsName);
//for (int i = 0; i < resolvedServer.AddressList.Length; i++)
//{
IPAddress address = GetServerIP(serverDnsName);
//IPAddress address = resolvedServer.AddressList[i];
IPEndPoint serverEndPoint = new IPEndPoint(address, serverPort);
Socket tcpSocket = new Socket(address.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
try
{
tcpSocket.Connect(serverEndPoint);
StreamWriter writer = null;
StreamReader reader = null;
try
{
NetworkStream networkStream = new NetworkStream(tcpSocket);
writer = new StreamWriter(networkStream);
clientMessage = textBox1.Text + ":" + Dns.GetHostName() + ":已连接";
writer.WriteLine(clientMessage);
writer.Flush();
reader = new StreamReader(networkStream);
string serverMessage = reader.ReadLine();
}
catch (SocketException ex)
{
MessageBox.Show(string.Format("Socket处理失败:{0}", ex.Message
}
catch (IOException ex)
{
MessageBox.Show(string.Format("IO处理失败:{0}", ex.Message
}
finally
{
if (reader != null)
reader.Close();
if (writer != null)
writer.Close();
}
//break;
}
catch (SocketException)
{
serverConnectionString = "";
if (tcpSocket != null)
tcpSocket.Close();
if (i == resolvedServer.AddressList.Length - 1)
MessageBox.Show("TCP连接失败!");
}
}
//}
}
catch (SocketException ex)
{
MessageBox.Show(string.Format("不能解析服务器DNS名称:{0}", ex.Message
}
}
Server: private void StartServices()
{
IPEndPoint localEndPoint = new IPEndPoint(IPAddress.Any, serverPort);
Socket serverSocket = new Socket(localEndPoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
try
{
serverSocket.Bind(localEndPoint);
serverSocket.Listen(int.MaxValue); while (serverServices)
{
try
{
Socket clientSocket = serverSocket.Accept(); StreamReader reader = null;
StreamWriter writer = null;
try
{
NetworkStream networkStream = new NetworkStream(clientSocket);
reader = new StreamReader(networkStream);
string clientMessage = reader.ReadLine();
writer = new StreamWriter(networkStream);
writer.WriteLine(serverMessage);
writer.Flush();
}
catch (SocketException ex)
{
MessageBox.Show(string.Format("消息处理失败:{0}", ex.Message));
}
finally
{
if (reader != null)
reader.Close();
if (writer != null)
writer.Close();
}
}
catch (SocketException ex)
{
MessageBox.Show(string.Format("服务器拒绝连接:{0}", ex.Message));
}
}
}
catch (SocketException ex)
{
MessageBox.Show(string.Format("服务器启动失败:{0}", ex.Message));
}
finally
{
if (serverSocket != null)
{
serverSocket.Close();
}
}
}
byte[4]+byte[4]+byte[4]+byte[data]
/包编号/一共多少个包/目前第几个包/真实数据
大概的是这样。。
接收后按你的协议在去组包