socket编程问题
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using System.Net;
using System.Net.Sockets;
using System.IO;
namespace ChineseChessProgram
{
public partial class FormWaitingRoom : Form
{
delegate void AppendStringDelegate(string str);
AppendStringDelegate appendstringdelegate;
//For Server
UserServer userserver = FormLogin.userserver;
//For Client
UserClient userclient = FormLogin.userclient;
public FormWaitingRoom()
{
InitializeComponent();
appendstringdelegate = new AppendStringDelegate(AppendString);
}
private void AppendString(string str)
{
listBoxState.Items.Add(str);
}
private void Form2_Load(object sender, EventArgs e)
{
ParameterizedThreadStart pts = new ParameterizedThreadStart(MsgCycleServer);
Thread threadServer = new Thread(pts);
threadServer.Start(userserver);
userserver.sw.WriteLine("MConnSuc");
}
private void MsgCycleServer(object obj)
{
UserServer userServer = (UserServer)obj;
while (true)
{
string receivemes=null;
try
{
receivemes = userServer.sr.ReadLine();//执行到这里就不动了!!!有消息来了也不动!!!
}
catch
{
//此处不执行
}
//此处也不执行
while (receivemes != null)
{
char charF = receivemes[0];
string strRemain = receivemes.Substring(1);
if (charF == 'M')
{
switch (strRemain)
{
case "ConnSuc":
break;
default:
break;
}
}
}
}
}
private void btnReady_Click(object sender, EventArgs e)
{
try
{
userserver.sw.WriteLine("MSt");
}
catch
{
return;
}
}
}
}
socket 编程 server 服务器 异常 --------------------编程问答-------------------- http://social.msdn.microsoft.com/Search/zh-CN?query=socke&ac=4 --------------------编程问答-------------------- 我之前测试过 这个 可以用,但是最后无法解决粘包问题就没弄了,不过对于你这个问题 还是行
http://blog.csdn.net/qq873113580/article/details/11897577 --------------------编程问答-------------------- 不明白为什么要用ReadLine --------------------编程问答-------------------- 应该是自动监听的,怎么需要主动读取呢??你的ReadLine不会再无限循环吧? --------------------编程问答-------------------- receivemes = userServer.sr.ReadLine();//执行到这里就不动了!!!有消息来了也不动!!!
是不是异常呢 --------------------编程问答-------------------- 不知道你所谓的 UserServer 是什么东东。
对于简单的东西,尽量不要封装。特别是,不要轻易使用csdn上一些所谓的socket封装。你要自己亲自动手写出来那十几行代码。
对于监听到客户端访问,例如 TcpClient.GetStream() 方法返回的 NetWorkStream 类型对象,它返回的是字节流(数据流),但是不保证都使用“回车、换行、文件结束”符号结束。
stream的读取通常是这样(我们假设收到的信息是一个连续的文本)
var container = new List<byte>();
int len = 0;
var buffer = new byte[409600];
while((len = stream.Read(buffer, 0, buffer.Length))>0)
container.AddRange(buffer.Take(len)); //这里的Take方法需要using System.Linq
var text = Encoding.UTF8.GetString(container.ToArray());
--------------------编程问答-------------------- 如果你一直等待着”回车、换行、文件结束“符号的到来,就会“死”在那里了。
补充:.NET技术 , .NET Framework