当前位置:编程学习 > C#/ASP.NET >>

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
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,