首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

小弟我快被SOCKET折磨死了,大家帮小弟我看一下C#代码吧(简洁易懂)

2013-10-04 
我快被SOCKET折磨死了,大家帮我看一下C#代码吧(简洁易懂)本帖最后由 u011708759 于 2013-10-03 09:43:17

我快被SOCKET折磨死了,大家帮我看一下C#代码吧(简洁易懂)
本帖最后由 u011708759 于 2013-10-03 09:43:17 编辑 服务器:


//不解释,跳过
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.Net;
using System.Net.Sockets;
using System.IO;
using System.Threading;



namespace Socket_Programing_Test
{

    public partial class Form1 : Form
    {
        //声明变量,tcpclient,端口和委托
        TcpListener tcplistener;
        int port;
        delegate void AppendStringDelegate(string str);
        AppendStringDelegate appendstringdelegate;


        public Form1()
        {
            InitializeComponent();
            appendstringdelegate = new AppendStringDelegate(AppendString);
        }

        private void button建立连接_Click(object sender, EventArgs e)
        {
            //从textbox1中获取端口
            port = Convert.ToInt32(textBox1.Text);
            try
            {
                tcplistener = new TcpListener(IPAddress.Any,port);
                tcplistener.Start();
            }
            catch(Exception ex)
            {
                listBox1.Items.Add("失败");
                listBox1.Items.Add(ex.Message);
                return;
            }
            //建立新的线程用于获取客户端请求信息
            ThreadStart ts = new ThreadStart(Listenclientconnect);
            Thread mythread = new Thread(ts);
            mythread.Start();
           
            listBox1.Items.Add("成功");

        }

        private void Listenclientconnect()
        {
            
            while (true)
            {
                TcpClient newclient; 
                try
                {
                    newclient = tcplistener.AcceptTcpClient();
                }
                catch 
                {
                    break;
                }
                
                ParameterizedThreadStart pts = new ParameterizedThreadStart(ReceiveData);
                Thread receivethread = new Thread(pts);
                receivethread.Start(newclient);
            }


        }

        private void ReceiveData(object obj)
        {
            
            TcpClient client= (TcpClient)obj;
            NetworkStream networkstream =client.GetStream();
            StreamReader sr=new StreamReader(networkstream);
            bool exit=false;
            while(exit==false)
            {
                string receivestring = null;
                try
                {
                    receivestring = sr.ReadLine();
                }
                catch
                {
                    return;
                }

                switch(receivestring)
                {

                    case "Login" :
                        listBox1.Invoke(appendstringdelegate,"一位用户已进入");
                        break;
                    case "Logout" :
                        listBox1.Invoke(appendstringdelegate,"一位用户离开");
                        break;
                    default:
                        break;
                }
                client.Close();
            }
        }

        private void button2_Click_1(object sender, EventArgs e)//关闭tcplistener
        {
            
            tcplistener.Stop();

            listBox1.Items.Add("成功关闭");
        }

        private void AppendString(string str)
        {
            listBox1.Items.Add(str);

        }

    }
}


服务器运行正常,可以建立并且监听,问题出在客户端无法通过广域网连接服务器(但输入局域网IP却可以)!!!

客户端代码:

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.Net;
using System.Net.Sockets;
using System.IO;
using System.Threading;



namespace Socket_Programing_Test__client_
{
    public partial class Form1 : Form
    {
        TcpClient tcpclient;
        IPAddress Serverip;
        int port;

        public Form1()
        {
            InitializeComponent();

        }


        private void Form1_Load(object sender, EventArgs e)
        {
            listBox1.Items.Clear();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            port = Convert.ToInt32(textBox2.Text);

            IPAddress[] ip1 = Dns.GetHostAddresses( textBox1.Text);
            Serverip = ip1[0];
            IPEndPoint ipep=new IPEndPoint(serverip,port);
            
            try
            {
                tcpclient = new TcpClient();
                tcpclient.Connect(ipep);
            }
            catch(Exception ex)//如果输入广域网IP,抛出异常:“由于目标计算机积极拒绝,无法连接”
            {
                listBox1.Items.Add("连接服务器失败");
                listBox1.Items.Add(ex.Message);
                return;
            }
            listBox1.Items.Add("连接成功");
        }
    }
}


如果客户端输入服务器的局域网IP,连接成功,但输入广域网IP,抛出异常:“由于目标计算机积极拒绝,无法连接”,我代码有问题么? socket C# 网络编程 C/S架构 服务器
[解决办法]
是不是防火墙设置问题? 
看看你的服务器的局域网和广域网都是怎么连接上的 单网卡还是双网卡
使用ping命令测试看看广域网ip可否ping通
至于端口占用估计不太可能

热点排行