none
C# Socket 兩台電腦互傳問題 RRS feed

  • 一般討論

  • 我的程式只能在同一台電腦開Server跟Client互傳信息

    換兩台電腦一邊一開個的話就不能傳,Client會拒絕連線

    是連同一個WIFI下試的

    Server程式:

     

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    using System.Net;
    using System.Net.Sockets;
    using System.IO;
    using SimpleTCP;

    namespace SERVER
    {
        public partial class Form1 : Form
        {
            private TcpClient client;
            public StreamReader STR;
            public StreamWriter STW;
            public string receive;
            public string text_to_send;

            public Form1()
            {
                InitializeComponent();
            }

            private void button1_Click(object sender, EventArgs e)    //Start Server
            {

                TcpListener listener = new TcpListener(IPAddress.Any, int.Parse(textBox2.Text));
                listener.Start();
                client = listener.AcceptTcpClient();
                textBox3.AppendText("Connected to Client" + "\n");

                STR = new StreamReader(client.GetStream());
                STW = new StreamWriter(client.GetStream());
                STW.AutoFlush = true;

                backgroundWorker1.RunWorkerAsync();
                backgroundWorker2.WorkerSupportsCancellation = true;

            }

            private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
            {
                while (client.Connected)
                {
                    try
                    {
                        receive = STR.ReadLine();
                        this.textBox3.Invoke(new MethodInvoker(delegate () { textBox3.AppendText("他:" + receive + "\n"); }));
                        receive = "";
                    }
                    catch (Exception x)
                    {
                        MessageBox.Show(x.Message.ToString());
                    }
                }
            }

            private void backgroundWorker2_DoWork(object sender, DoWorkEventArgs e)
            {
                if (client.Connected)
                {
                    STW.WriteLine(text_to_send);
                    this.textBox3.Invoke(new MethodInvoker(delegate () { textBox3.AppendText("我:" + text_to_send + "\n"); }));
                }
                else
                {
                    MessageBox.Show("Send failed!");
                }
                backgroundWorker2.CancelAsync();
            }

            private void button2_Click(object sender, EventArgs e)
            {
                if (textBox4.Text != "")
                {
                    text_to_send = textBox4.Text;
                    backgroundWorker2.RunWorkerAsync();
                }
                textBox4.Text = "";
            }
        }

    }

    Client程式:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;

    using System.Net;
    using System.Net.Sockets;
    using System.IO;

    namespace CLIENT
    {
        public partial class Form1 : Form
        {
            private TcpClient client;
            public StreamReader STR;
            public StreamWriter STW;
            public string receive;
            public string text_to_send;

            public Form1()
            {
                InitializeComponent();

                IPAddress[] localIP = Dns.GetHostAddresses(Dns.GetHostName());
                foreach (IPAddress address in localIP)
                {
                    if (address.AddressFamily == AddressFamily.InterNetwork)
                    {
                        textBox1.Text = address.ToString();
                    }
                }
            }

            private void button1_Click(object sender, EventArgs e)    //Start Server
            {

                IPEndPoint IP_End = new IPEndPoint(IPAddress.Parse(textBox1.Text), int.Parse(textBox2.Text));

                client = new TcpClient();
                try
                {
                    client.Connect(IP_End);
                    if (client.Connected)
                    {
                        textBox3.AppendText("Connected to Server" + "\n");

                        STR = new StreamReader(client.GetStream());
                        STW = new StreamWriter(client.GetStream());
                        STW.AutoFlush = true;

                        backgroundWorker1.RunWorkerAsync();
                        backgroundWorker2.WorkerSupportsCancellation = true;
                      }
                }
                catch (Exception x)
                {
                    MessageBox.Show(x.Message.ToString());
                }

            }

            private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
            {
                while (client.Connected)
                {
                    try
                    {
                        receive = STR.ReadLine();
                        this.textBox3.Invoke(new MethodInvoker(delegate () { textBox3.AppendText("他:" + receive + "\n"); }));
                        receive = "";
                    }
                catch (Exception x)
                {
                   MessageBox.Show(x.Message.ToString());
                }
                }
            }

            private void backgroundWorker2_DoWork(object sender, DoWorkEventArgs e)
            {
                if (client.Connected)
                {
                    STW.WriteLine(text_to_send);
                    this.textBox3.Invoke(new MethodInvoker(delegate () { textBox3.AppendText("我:" + text_to_send + "\n"); }));
                }
                else
                {
                    MessageBox.Show("Send failed!");
                }
                backgroundWorker2.CancelAsync();
            }

            private void button2_Click(object sender, EventArgs e)
            {
                if (textBox4.Text != "")
                {
                    text_to_send = textBox4.Text;
                    backgroundWorker2.RunWorkerAsync();
                }
                textBox4.Text = "";
            }
        }

    }

    因為這份功課還滿趕時間

    求各位大神幫幫

    2018年6月3日 下午 03:28

所有回覆

  • OS/防毒軟體內建的防火牆測試過嗎?

    不精確的問法,就會得到隨便猜的答案;自己都不肯花時間好好描述問題,又何必期望網友會認真回答?

    2018年6月3日 下午 03:38
  • 不太明白,你的意思是關掉防火和防毒再試?

    我電腦是沒有裝防毒

    但還沒試過關防火

    2018年6月3日 下午 03:45
  • TcpListenr 端要允許 TcpListener 所使用的 Port 通過防火牆

    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。 https://skilltree.my/

    2018年6月3日 下午 04:11
    版主
  • 是兩台電腦用同一個PORT 然後SERVER端要關防火嗎?

    2018年6月3日 下午 04:51
  • 關了還是不行
    2018年6月3日 下午 05:07
  • 你防火牆關了,有如何測通?

    例如使用命令提示字元

    telnet ServerIP PortNumber


    不精確的問法,就會得到隨便猜的答案;自己都不肯花時間好好描述問題,又何必期望網友會認真回答?

    2018年6月4日 下午 03:01
  • 我已經解決了﹐是輸入錯IP
    2018年6月7日 下午 05:00