我用streamwriter向networkstream中写入内容,当写入的东西超过1024字节时,后面的东西都不能被接收方收到。为什么呢?应该如何处理?
附代码:
【服务端】
private void PublicListenThread()
{
Socket Server_Listener;
Socket cSocket;
NetworkStream ns;
StreamReader sr;
StreamWriter sw;
Server_Listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPAddress LocalIP = IPAddress.Parse(LocalIPAddress);
IPEndPoint Server = new IPEndPoint(LocalIP, 8484);
Server_Listener.Bind(Server);
Server_Listener.Listen(10); while (true)
{
cSocket = Server_Listener.Accept();
if (cSocket.Connected)
{
StringBuilder xxxx=new StringBuilder("",2000);
ns = new NetworkStream(cSocket);
sr = new StreamReader(ns);
sw = new StreamWriter(ns);
for(int k=0;k<=1024;k++)
{
xxxx.Append("a");
}
xxxx.Append("\0");
char[] tests = System.Text.Encoding.Default.GetChars(System.Text.Encoding.Default.GetBytes(xxxx.ToString()));
sw.Write(tests);
sw.Flush();
}
}
}
【客户端】
{
TcpClient client = new TcpClient(hostName, portNum);
NetworkStream ns = client.GetStream();
int x;
StringBuilder ServerReturn = new StringBuilder("", 99999);
x=ns.Read(_ServerReturn, 0, 99999);
char[] temp = System.Text.Encoding.Default.GetChars(_ServerReturn, 0, _ServerReturn.Length);
while (temp[i] != '\0')
{
ServerReturn.Append(temp[i].ToString());
i++;
}
client.Close();
}
附代码:
【服务端】
private void PublicListenThread()
{
Socket Server_Listener;
Socket cSocket;
NetworkStream ns;
StreamReader sr;
StreamWriter sw;
Server_Listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPAddress LocalIP = IPAddress.Parse(LocalIPAddress);
IPEndPoint Server = new IPEndPoint(LocalIP, 8484);
Server_Listener.Bind(Server);
Server_Listener.Listen(10); while (true)
{
cSocket = Server_Listener.Accept();
if (cSocket.Connected)
{
StringBuilder xxxx=new StringBuilder("",2000);
ns = new NetworkStream(cSocket);
sr = new StreamReader(ns);
sw = new StreamWriter(ns);
for(int k=0;k<=1024;k++)
{
xxxx.Append("a");
}
xxxx.Append("\0");
char[] tests = System.Text.Encoding.Default.GetChars(System.Text.Encoding.Default.GetBytes(xxxx.ToString()));
sw.Write(tests);
sw.Flush();
}
}
}
【客户端】
{
TcpClient client = new TcpClient(hostName, portNum);
NetworkStream ns = client.GetStream();
int x;
StringBuilder ServerReturn = new StringBuilder("", 99999);
x=ns.Read(_ServerReturn, 0, 99999);
char[] temp = System.Text.Encoding.Default.GetChars(_ServerReturn, 0, _ServerReturn.Length);
while (temp[i] != '\0')
{
ServerReturn.Append(temp[i].ToString());
i++;
}
client.Close();
}
解决方案 »
- 菜单栏与工具栏的绑定
- Winform下的RichtextBox如何自动出现水平滚动条
- [winform]怎样屏蔽WM_CLOSE消息?
- ▲▲▲线程中怎么弹出窗体
- 新手问题~~~
- 怎么实现聊天工具的用户列表
- 请问我的在debug文件夹下的C#应用程序配置文件每次程序重新编译完后就不见了,要让每次编译后还有怎么办!!!!谢谢了.
- 高分辨率屏幕录像在低分辨屏幕下不清晰的问题如何解决?
- 事件问题
- 是不是listview 控件有bug,有没有人碰到这样的问题????
- vb.net将数据库各种字段的类型均当作Object类型了,在vb.net代码中,很多字段的值都要在后面缀“.ToString()”,太繁琐,如何才能不加“.ToString()”。请看例子:
- 用WindowsMediaPlayer播放wav文件时无法快进
断点的时候发现,发送方的StringBuilder xxxx貌似有问题,查看这个变量时,在超过1024字节后它自己就换行了……