在连接以后
从服务端直接往客户端发数据
Socket s = cl;
if (s.Connected)
{
s.Send(message, message.Length, 0);}
message的数据是异步读取的消息队列
客户端代码是
//异步读取数据的辅助类
public class StateInfo
{
public Socket socket = null;
public const int bufferSize = 256;
public byte[] buffer = new byte[bufferSize];
public StringBuilder sb = new StringBuilder();
} private static void Receive(Socket socket)
{
try
{
StateInfo state = new StateInfo();
state.socket = socket;
socket.BeginReceive(state.buffer, 0, state.buffer.Length, SocketFlags.None,
new AsyncCallback(ReceiveCallback), state); }
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
private static void ReceiveCallback(IAsyncResult ar)
{ StateInfo state = (StateInfo)ar.AsyncState;
//读取数据
int dataSize = state.socket.EndReceive(ar);
if (dataSize > 0)
{
state.sb.Remove(0, state.sb.Length);
state.sb.Append(Encoding.UTF8.GetString(state.buffer, 0, dataSize)); state.socket.BeginReceive(state.buffer, 0, state.buffer.Length, SocketFlags.None,
new AsyncCallback(ReceiveCallback), state);
//显示接收数据
string content = state.sb.ToString(); } }
比如我消息队列里有abcd和efgh2条数据,在客户端的content有时候可能接到1条数据"abcdefgh",也有可能是"ab"和"cdefgh",也就是数据都乱了,求解
从服务端直接往客户端发数据
Socket s = cl;
if (s.Connected)
{
s.Send(message, message.Length, 0);}
message的数据是异步读取的消息队列
客户端代码是
//异步读取数据的辅助类
public class StateInfo
{
public Socket socket = null;
public const int bufferSize = 256;
public byte[] buffer = new byte[bufferSize];
public StringBuilder sb = new StringBuilder();
} private static void Receive(Socket socket)
{
try
{
StateInfo state = new StateInfo();
state.socket = socket;
socket.BeginReceive(state.buffer, 0, state.buffer.Length, SocketFlags.None,
new AsyncCallback(ReceiveCallback), state); }
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
private static void ReceiveCallback(IAsyncResult ar)
{ StateInfo state = (StateInfo)ar.AsyncState;
//读取数据
int dataSize = state.socket.EndReceive(ar);
if (dataSize > 0)
{
state.sb.Remove(0, state.sb.Length);
state.sb.Append(Encoding.UTF8.GetString(state.buffer, 0, dataSize)); state.socket.BeginReceive(state.buffer, 0, state.buffer.Length, SocketFlags.None,
new AsyncCallback(ReceiveCallback), state);
//显示接收数据
string content = state.sb.ToString(); } }
比如我消息队列里有abcd和efgh2条数据,在客户端的content有时候可能接到1条数据"abcdefgh",也有可能是"ab"和"cdefgh",也就是数据都乱了,求解
解决方案 »
- 运算符“&”无法应用于“bool”和“string”类型的操作数
- 在线急等!! 解决文本框输入数字而不输入字符的问题!!
- 我用C#做的一个管理系统,大家看看可以吗?提提意见
- 能不能在bindingnavigator中添加一个datetimepicker控件啊?
- 将窗口关闭设为隐藏,然后又要在窗口关闭以前执行某个操作
- 〔求助〕关于AD的两个问题,谢谢,关键字[adsi / ad / ldap /domain]
- 如何访问在DataSet 中使用 row.delete方法标志为 deleted的数据
- 现在做WEB程序比WIN程序工作好找许多
- 求一些函数?
- 如何对已有的DataSet用SqlCommandBuilder更新数据库?
- 怎么在数据库中查找某些条件并把符合条件的元组在gridview中显示出来?vs2008,Oracle数据库,C#语言
- 2003 winform 里面的datagrid,如何设置其中的某些列无法获得焦点呢?
还是那句话,不可能混合的,你上面给的代码没有包含显示数据部分,你那个“string content = state.sb.ToString();”并没有做到显示数据,存放在一个临时变量里就没有用到,所以问题肯定是你没有贴出来的数据显示部分。