Diapolos 2018-12-16 04:46 采纳率: 60%
浏览 763

c#异步通讯 tcp连接任意ip怎么修改

c#异步通讯 tcp连接任意ip怎么修改,本机可以工作,但是把Dns.GetHostName()改成指定的ipv6地址连接不上

private int maxPlayingTables;
        private CheckBox[,] checkBoxGameTables;
        private TcpClient client = null;
        private Service service;
        private StreamWriter sw;
        private StreamReader sr;
        private BinaryReader br;
        private BinaryWriter bw;
        bool exitWhile = false;

        private FormPlaying formPlaying;

        private bool isConnected = false; //是否连接成功

        BackgroundWorker connectWork = new BackgroundWorker();
        //是否正常退出接收线程
        private bool normalExit = false;
        //命令是否来自服务器
        private bool isReceiveCommand = false;
        //所坐的游戏桌座位号,-1表示未入座,0表示坐到黑方,1表示坐到白方
        private int side = -1;
        public FormRoom()
        {
            InitializeComponent();
            connectWork.DoWork += new DoWorkEventHandler(connectWork_DoWork);
            connectWork.RunWorkerCompleted +=
                new RunWorkerCompletedEventHandler(connectWork_RunWorkerCompleted);
        }
        private void FormRoom_Load(object sender, EventArgs e)
        {
            Random r = new Random((int)DateTime.Now.Ticks);
            textBoxName.Text = "Player" + r.Next(1, 100);
            maxPlayingTables = 0;
            textBoxLocal.ReadOnly = true;
            textBoxServer.ReadOnly = true;
        }

        /// <summary>异步方式与服务器进行连接</summary>
        void connectWork_DoWork(object sender, DoWorkEventArgs e)
        {
            client = new TcpClient();
            //此处为方便演示,实际使用时要将Dns.GetHostName()改为服务器域名
            //IAsyncResult result = client.BeginConnect(Dns.GetHostName(), 51888,null,null);
            //while (result.IsCompleted == false)
            //{
            //    Thread.Sleep(100);
            ////    
            //}
            try
            {
                // client.EndConnect(result);
                client = new TcpClient(Dns.GetHostName(), 51888);
                e.Result = "login";
            }
            catch (Exception ex)
            {
                e.Result = ex.Message;
                return;
            }
        }
        /// <summary>异步方式与服务器完成连接操作后的处理</summary>
        void connectWork_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            if (e.Result.ToString() == "login")
            {

                isConnected = true;

                groupBox1.Visible = true;
                textBoxLocal.Text = client.Client.LocalEndPoint.ToString();
                textBoxServer.Text = client.Client.RemoteEndPoint.ToString();
                buttonConnect.Enabled = false;
                //获取网络流
                NetworkStream netStream = client.GetStream();
                //sr = new StreamReader(netStream, System.Text.Encoding.UTF8);
                //sw = new StreamWriter(netStream, System.Text.Encoding.UTF8);
                br = new BinaryReader(netStream);
                bw = new BinaryWriter(netStream);
                service = new Service(listBox1, bw);
                service.SendToServer("Login," + textBoxName.Text.Trim());
                Thread threadReceive = new Thread(new ThreadStart(ReceiveData));
                threadReceive.IsBackground = true;
                threadReceive.Start();
            }
            else
            {
                //AddStatus("连接失败:" + e.Result);
                MessageBox.Show("与服务器连接失败", "",
                   MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
                //buttonConnect.Enabled = true;
            }
        }

        /// <summary>【登录】按钮的Click事件</summary>
        private void buttonConnect_Click(object sender, EventArgs e)
        {
            buttonConnect.Enabled = false;
            connectWork.RunWorkerAsync();
            //try
            //{
            //    //仅作本机测试,实际使用时要将Dns.GetHostName()改为服务器域名
            //    client = new TcpClient(Dns.GetHostName(), 51888);

            //}
            //catch
            //{
            //    MessageBox.Show("与服务器连接失败", "",
            //        MessageBoxButtons.OK, MessageBoxIcon.Information);
            //    return;
            //}
            //groupBox1.Visible = true;
            //textBoxLocal.Text = client.Client.LocalEndPoint.ToString();
            //textBoxServer.Text = client.Client.RemoteEndPoint.ToString();
            //buttonConnect.Enabled = false;
            ////获取网络流
            //NetworkStream netStream = client.GetStream();
            //sr = new StreamReader(netStream, System.Text.Encoding.UTF8);
            //sw = new StreamWriter(netStream, System.Text.Encoding.UTF8);
            //service = new Service(listBox1, sw);
            ////登录服务器,获取服务器各桌信息
            ////格式:Login,昵称
            //service.AsyncSendToServer("Login," + textBoxName.Text.Trim());
            //Thread threadReceive = new Thread(new ThreadStart(ReceiveData));
            //threadReceive.Start();
        }

后面处理接受数据的就不贴了,

  • 写回答

1条回答

  • 蓝创精英团队 2019-02-25 14:53
    关注

    TcpClient client = new TcpClient(AddressFamily.InterNetworkV6);
    client.Connect("fe80::14d8:a209:89e6:c162%14", 9900);

    评论

报告相同问题?

悬赏问题

  • ¥15 树莓派与pix飞控通信
  • ¥15 自动转发微信群信息到另外一个微信群
  • ¥15 outlook无法配置成功
  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题