`
lzj0470
  • 浏览: 1272853 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

socket 指向外网IP

    博客分类:
  • C#
阅读更多
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);
        }
    }
}

 说明:socket端口需要指向在路由器映射的端口

 转载来源:http://topic.csdn.net/u/20090605/16/3FE7D4B8-1C0F-4B0A-B389-DDAE58B7477C.html

分享到:
评论

相关推荐

    获得本机ip地址的例子

    注意,这里得到的是外网IP,如果网络未连接,则返回的是内网IP。 在Java中,可以使用`InetAddress`类来获取IP地址: ```java import java.net.InetAddress; import java.net.UnknownHostException; public class ...

    C#基于socket的聊天工具与其源码.pdf

    具体而言,外网用户需要在路由器上配置端口映射,将特定端口指向内部服务器的IP地址;同时,服务器端需配置相应的域名,以便于外网客户端的识别和访问。 ### 涂鸦与多媒体功能集成 除了基本的文本聊天,这款工具还...

    自己整理的socket.txt

    除了上述基本概念外,Socket编程还涉及许多高级主题,例如HMAC(哈希消息认证码),这是一种用于数据完整性验证的安全机制。在网络安全领域,HMAC常用于实现Challenge/Response认证机制,确保通信双方的身份真实有效...

    c++语言获取本地ip

    - `#include<WinSock2.h>`:Windows Socket API的头文件,提供了用于网络通信的功能。 - `#include<iostream>`:用于输入输出操作的标准库。 - `#pragma comment(lib,"WS2_32")`:链接器指令,告诉编译器链接到`...

    MTK SOCKET API 文档 --- 各种函数介绍、参数解析

    除了上述两个函数外,MTK SOCKET API 还包含了多个其他重要的 Socket 相关函数,例如: - **`soc_socket`**:创建一个新的 Socket。 - **`soc_bind`**:绑定 Socket 到特定端口。 - **`soc_listen`**:设置 Socket ...

    TCP_IP详解卷1

    8.4 广域网输出 75 8.5 IP源站选路选项 76 8.5.1 宽松的源站选路的traceroute 程序示例 78 8.5.2 严格的源站选路的traceroute 程序示例 79 8.5.3 宽松的源站选路traceroute程序 的往返路由 80 8.6 小结 81 第9章 IP...

    linux网络编程socket介绍.docx

    sockfd是客户端创建的套接字描述符,servaddr指向服务器的地址结构,包含服务器的IP和端口信息,addrlen是该结构的长度。成功连接后,客户端和服务器就可以通过套接字进行数据传输。 int send(int sockfd, const ...

    2022年网络工程师全真模拟试卷及解析下午试题.doc

    由于路由器的外口和ISP之间占据了2个IP地址,剩下的可用IP地址为4个。 - 题目中提到使用202.112.68.41和255.255.255.252作为新的掩码,这意味着每个子网包含4个地址,减去网络地址和广播地址,实际可用的IP地址是2...

    java网络编程

    除了Socket API外,Java还提供了URL和URLConnection类来处理HTTP和其他URL协议的网络通信。URL表示统一资源定位符,可以用来访问互联网上的各种资源。URLConnection类是URL的子类,它允许我们打开到URL指向的资源的...

    C++聊天程序

    - **Socket:**在Win32中,Socket是一个指向特定传输提供者的句柄。它不同于文件描述符,而是具有独立的数据类型SOCKET。 - **Socket类型:** - **流式套接字 (SOCK_STREAM):**提供一种可靠的、面向连接的服务,...

    TCP/IP详解part_2

    8.4 广域网输出 75 8.5 IP源站选路选项 76 8.5.1 宽松的源站选路的traceroute 程序示例 78 8.5.2 严格的源站选路的traceroute 程序示例 79 8.5.3 宽松的源站选路traceroute程序 的往返路由 80 8.6 小结 81 第9章 IP...

    Linux网络编程详细笔记

    - **服务端**:等待客户端连接并响应请求的一方,通常会绑定到特定的IP地址和端口上。 - **工作流程**: - 服务端程序先启动,并绑定到指定的端口进行监听。 - 当客户端程序发送连接请求时,服务端接收该请求并...

    liunx课件关于shell

    - `level`:指定选项所在的协议层,如SOL_SOCKET(通用套接字选项)、IPPROTO_IP(IP选项)或IPPROTO_TCP(TCP选项)。 - `optname`:需要获取的选项名称。 - `optval`:指向接收选项值的缓冲区。 - `optlen`:入口...

    linux网络编程入门

    - **telnet**:除了作为远程登录工具外,telnet还可以用于测试服务端程序是否正常工作。例如,如果服务端在8888端口监听,则可通过执行`telnet localhost 8888`来检查服务状态。 **1.3 TCP/UDP 协议介绍** - **TCP...

    libnids-API

    除了IP层的重组外,`libnids`还提供了TCP流重组的功能,即能够追踪TCP连接中的数据流。这对于分析会话级别的网络活动非常重要。 开发者可以通过定义一个类型为`void tcp_callback(struct tcp_stream *ns, void **...

    chat客户端程序 (22KB)...

    "WSK"可能是"WinSock"的缩写,WinSock是Windows操作系统上的网络编程接口,用于实现TCP/IP协议栈。 2. **ChatClnt.exe** - 这是聊天客户端的可执行文件,用户可以直接运行来启动聊天应用。 3. **frmChatClnt.frm**...

    UNIX系统网络编程.pptx

    `s`是套接字描述符,`name`是指向包含服务器地址信息的结构体的指针,`namelen`是该结构体的长度。 - **Bind函数**: - `int bind(int sockfd, const struct sockaddr *myaddr, socklen_t addrlen)`:将套接字与...

    TCPIP详解卷[1].part03

    8.4 广域网输出 75 8.5 IP源站选路选项 76 8.5.1 宽松的源站选路的traceroute 程序示例 78 8.5.2 严格的源站选路的traceroute 程序示例 79 8.5.3 宽松的源站选路traceroute程序 的往返路由 80 8.6 小结 81 第9章 IP...

Global site tag (gtag.js) - Google Analytics