没有仔细研究过TcpListener,不知道listener是否禁止写。一般是不用listener写的,而是在server端产生一个client,用这个client和tcpClient通信。TcpClient tcpClient = tcpListener.AcceptTcpClient();
解决方案 »
- windwos server 2008 r2上能安装VS2010吗
- 构造函数起什么作用,可以带参数吗?
- 如何将文件夹名改名
- vs2005程序的设计模式的问题
- 用C#写的asp.net程序出现乱码
- 如何实现 C# winform ListView 鼠标移入行时,行变色高亮
- 如何用datagrid进行批量增加数据到数据库??
- 【高分】调用COM时的错误,请高手指点一下
- 使用Context.User做身份认证时是否要使用Cookie?系统把用户名放在什么地方呢?
- 谁能详细解释一下COM+的套间和上下文?
- TcpClient的ReceiveTimeout属性的问题
- .net WINDOWS程序的配置文件 myApp.config在哪里?
就是一定要读完才能写或者写完才能读,如果你让它读的话而
此时缓冲区里什么都没有,它就处于阻塞态,那你如果此时要写
的话就会出问题.
假设客户端的缓冲区是1024字节,服务器上正好发送了1024字节的话,客户端有可能会分两次来读取,一次是623,一次是401,这种情况是随机的,所以最好用异步方式,这样,读取结束后你可以在IAsyncResult.IsCompleted属性中知道。
你可以换作用Socket来做,例子如下:TcpListener端code:TcpListener listener=null;
listener=new TcpListener(ServerPort);//创建TcpListener对象实例
listener.Start(); //启动侦听 Socket s = listener.AcceptSocket();byte[] recComdata=new Byte[32]; //接收的字节数组
int recLen = s.Receive(recComdata);//接收byte[] sendbyte=... //此处初始化待发送的字节数组
s.Send(sendbyte,sendbyte.Length,0);//发送s.Close();//////////////////////////////////TcpClient端code:TcpClient tcpClient=new TcpClient(ServerIP,SeverPort); NetworkStream netStream=tcpClient.GetStream();//得到网络流 byte[] sendCom = Encoding.ASCII.GetBytes("my send data");
netStream.Write(sendCom,0,sendCom.Length);//发送byte[] recdata=new Byte[1000];//接收的数组
netStream.Read(recdata, 0, recdata.Length);//接收netStream.close();
tcpClient.close();以上程序共参考。