想要写一个网络五子棋游戏,form里面有两个按钮,一个是建立游戏,一个是加入游戏,当按建立游戏时,
则作为服务器,当按加入游戏时,则为客户端,想要在同一台机上测试, 要如何实现, public partial class Form1 : Form
    {
        TcpClient tcpClient;
        TcpListener tcpListener;
        StreamWriter sw;
        StreamReader sr;
        Thread t;
        IPAddress localAddress;
        int port;
        public Form1()
        {
            InitializeComponent();
        }        private void button1_Click(object sender, EventArgs e)
        {
            //tcpClient = new TcpClient(new IPEndPoint(localAddress,port));
            tcpListener = new TcpListener(localAddress, port);
            tcpListener.Start();
            t = new Thread(new ThreadStart(receiveConnect));
            t.Start();            CreateBtn.Enabled = false;
            JoinBtn.Enabled = false;
        }
        private void receiveConnect()
        {
            try
            {
                tcpClient = tcpListener.AcceptTcpClient();
            }
            catch
            {            }            receiveData(tcpClient);
        }
        private void receiveData(Object o)
        {
            TcpClient client = (TcpClient)o;
            
            sw = new StreamWriter(client.GetStream(), System.Text.Encoding.UTF8);
            sr = new StreamReader(client.GetStream(), System.Text.Encoding.UTF8);
            while (true)
            {
                string str = sr.ReadLine();
                string[] split = str.Split(',');
                switch (split[0])
                {
                    case "ready":
                        break;
                    case "play":
                        string x = split[1];
                        string y = split[2];
                        break;
                    case "connect":
                        MessageBox.Show("connect");
                        sw.WriteLine("connectSuccess");
                        sw.Flush();
                        break;
                    case "connectSuccess":
                        MessageBox.Show("connectsuccess");
                        break;
                        
                }
            }
        }        private void Form1_Load(object sender, EventArgs e)
        {
            IPAddress[] addrIP = Dns.GetHostAddresses(Dns.GetHostName());
            localAddress = addrIP[0];
            port = 6688;
        }        private void button2_Click(object sender, EventArgs e)
        {
            CreateBtn.Enabled = false;
            JoinBtn.Enabled = false;
            tcpClient = new TcpClient(new IPEndPoint(localAddress, port));
            StreamWriter streamWriter = new StreamWriter(tcpClient.GetStream(), System.Text.Encoding.UTF8);
            streamWriter.WriteLine("connect");
            streamWriter.Flush();
            t = new Thread(new ParameterizedThreadStart(receiveData));
            t.Start(tcpClient);
        }
    }

解决方案 »

  1.   

    没细看,应该是这样:建立游戏,就是服务端,给个ip是自己的,端口是随即端口,不是客户端,已有的东西要清掉重来。加入游戏同样,要扫描ip是自己的,端口是一个个扫描。
    要是不想扫描,你另外开个服务端,端口固定,建立的时候告它,加入的时候问它。f5出来一个五子棋进程,再f5又出来一个,可以在一台机器测试的。
      

  2.   

    静态类字段 static const int startport=6688; static int nextport=6688;
    实例字段 List<int> 服务端列表;
    form_load()有this.port=nextport++;
    建立游戏_click()有tcpListener = new TcpListener(localAddress, this.port);
    加入游戏_click()有this.服务端列表=new List<int>();
    for(int i=startport; i<=nextport;i++){bool existt=问答;if(existt){this.服务端列表.Add(i);}}
    然后出个ComboBox是服务端列表,选好,出个按牛“开始”,才是建立TcpClient,开始游戏。