客户端在内网,服务器端再外网机器上(例如服务器端IP为:220.194.57.122)
下面代码可以连通么?(局域网测试已成功)
如果不能连通,那该怎么连?说说方法。
客户端例子:
using System;   
using System.Collections.Generic;   
using System.ComponentModel;   
using System.Data;   
using System.Drawing;   
using System.Text;   
using System.Windows.Forms;   
using System.Net.Sockets;   
using System.Net;   
using System.Threading;   
  
namespace mytcpchat   
{   
    public partial class Form1 : Form   
    {   
        Socket c;   
        public Form1()   
        {   
            InitializeComponent();   
        }   
  
        private void Form1_Load(object sender, EventArgs e)   
        {   
             
        }   
         public void Client(IPEndPoint ServerIPEP)   
        {   
            try  
            {   
                c = new Socket(ServerIPEP.AddressFamily, SocketType.Stream, ProtocolType.Tcp);   
                c.Connect((EndPoint)ServerIPEP);   
                c.Send(System.Text.Encoding.Default.GetBytes("这是一个测试消息"));   
                byte[] data = new byte[2048];   
                int rect = c.Receive(data);   
                byte[] chat = new byte[rect];   
                Buffer.BlockCopy(data, 0, chat, 0, rect);   
                MessageBox.Show(System.Text.Encoding.Default.GetString(chat));   
            }   
            catch (Exception ex)   
            {   
                MessageBox.Show(ex.Message);   
            }   
  
        }   
  
        private void button1_Click(object sender, EventArgs e)   
        {   
            Client(new IPEndPoint(IPAddress.Parse("220.194.57.122"), 5566));   
        }   
    }   
}    
  
服务端例子:   
  
using System;   
using System.Collections.Generic;   
using System.ComponentModel;   
using System.Data;   
using System.Drawing;   
using System.Text;   
using System.Windows.Forms;   
using System.Net.Sockets;   
using System.Net;   
using System.Threading;   
namespace mytcpserver   
{   
    public partial class Form1 : Form   
    {   
        Socket s;   
        IPEndPoint ServerIPEP;   
        public Form1()   
        {   
            InitializeComponent();   
        }   
         public void  Server(int port)   
        {   
            ServerIPEP = new IPEndPoint(IPAddress.Any, port);   
            s = new Socket(ServerIPEP.AddressFamily, SocketType.Stream, ProtocolType.Tcp);   
            s.Bind((EndPoint)ServerIPEP);   
            s.Listen(10);   
            while (true)   
            {   
                Socket uc = s.Accept();   
                byte[] data = new byte[2048] ;   
                int rect = uc.Receive(data);   
                byte[] chat = new byte[rect] ;   
                Buffer.BlockCopy(data, 0, chat, 0, rect);   
                MessageBox.Show("接收到来及客户端的消息"+uc.RemoteEndPoint.ToString()+System.Text.Encoding.Default.GetString(chat));   
                uc.Send(chat);   
            }   
        }   
        private void Form1_Load(object sender, EventArgs e)   
        {   
  
        }   
  
        private void button1_Click(object sender, EventArgs e)   
        {   
            Server(5566);   
        }   
    }   
}  

解决方案 »

  1.   

    能否连接外网和你的程序没有关系,取决于你所在局域网的网络设置,在你局域网的机器上,如果执行ping www.g.cn 能直接ping通,说明可以直接连外网,如果不行,再问问网管,是不是有限制。
      

  2.   

    可以连接。当时目前网络服务商有些会忽略来自外网的Ping。电信没有忽略。网通是忽略了的。还有个就是你需要设置路由器,把你的IP暴露跟外网,这样来自的外网的网络才能访问你。在地址栏输入192.168.1.1(如果不知道路由器IP地址,可以在DOS下面输入Ipconfig命令来查看)如果能进去,选择"转发规则"-->“DMZ主机”。打开后直接启用就可以了。
    有些路由器不一定叫转发规则,但DMZ主机这个选择都是有的。
    (这并不是个安全操作)。