c# socket多线程问题~

一个服务器可以服务多个客户端,单个运行正常,可是第二个客户端启动后第一个客户端无法接受服务器的消息,第二个还可以正常运行~代码如下:staticvoidMain(stri... 一个服务器可以服务多个客户端,单个运行正常,可是第二个客户端启动后第一个客户端无法接受服务器的消息,第二个还可以正常运行~

代码如下:
static void Main(string[] args)
{
SerSock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
SerSock.Bind(new IPEndPoint(IPAddress.Any, 55555));
SerSock.Listen(10);
Console.WriteLine("This is Server,ready to work");

while (true)
{
Accepted = SerSock.Accept();
Thread ListenThread = new Thread(new ThreadStart(Process));
ListenThread.Start();
}

}

Process是对客户端提供服务的函数,不知道错误在哪啊?
展开
 我来答
百度网友d9d888a
2011-10-25 · TA获得超过341个赞
知道小有建树答主
回答量:186
采纳率:0%
帮助的人:78万
展开全部
启动了第二个客户端导致第一个客户端不能正常运行的原因是:Process方法中有对变量Accepted的操作,且每次只针对最新的Accepted变量操作。当第二个客户端成功连接后(即while循环已经执行到了第二次,这时的ListenThread线程只处理第二次循环中产生的客户端Accepted. 解决方法如下:

static void Main(string[] args){
while (true)
{
Socket accepted = SerSock.Accept();
ParameterizedThreadStart pts = new ParameterizedThreadStart(Process);
Thread th = new Thread(pts);
th.Start(accepted);
}
}
}

static void Process(object obj)
{
Socket soc=(Socket)obj;
//在这里针对soc进行操作
}

注意:需要修改Process方法,让它接受一个object类型的参数。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名_热心网友
2011-11-08 · TA获得超过719个赞
知道大有可为答主
回答量:3827
采纳率:0%
帮助的人:8443万
展开全部
int LastIndexSign = Context.Request.Url.AbsolutePath.LastIndexOf("/");
Context.Response.Clear();
Context.Response.ContentEncoding = Encoding.GetEncoding("gb2312");
Context.Response.StatusCode = 301;
Context.Response.Status = "301 Moved Permanently";
Context.Response.Charset = "gb2312";
Context.Response.AppendHeader("location", LastIndexSign == Context.Request.Url.AbsolutePath.Length - 1 ? Context.Request.Url.AbsolutePath.Insert(LastIndexSign, HttpUtility.UrlEncode("_轴承/", Encoding.GetEncoding("gb2312"))) : Context.Request.Url.AbsolutePath + HttpUtility.UrlEncode("_轴承/", Encoding.GetEncoding("gb2312")));
Context.Response.Flush();
Context.Response.End();
return;
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
狗头鱼
2011-10-25 · 超过11用户采纳过TA的回答
知道答主
回答量:38
采纳率:0%
帮助的人:43.2万
展开全部
很简单,Accepted 作为你与客户端连接的套接字,你是作为全局变量存在的,具有唯一性,正确的方法是,将Process作为一个新的类。
每次有客户端连接产生新的套接字时,实例化该类,将新生成的套接字传递到新的实例中。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
darkluo1
2011-10-25
知道答主
回答量:24
采纳率:0%
帮助的人:16.4万
展开全部
友情帮顶
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
oceanerp
2011-10-25
知道答主
回答量:19
采纳率:0%
帮助的人:3.2万
展开全部
??
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式