Socket编程学习笔记(二)

编者最近想用Socket编程的知识做一个类似QQ的即时通讯软件,但后来发现,以前的编写的Socket程序都是在局域网内部进行通讯,而编写这个通讯软件就必须用到Socket的跨外网通讯知识。想解决这个问题,我们需要掌握端口映射的知识。这次,就让小编来给大家补补课吧。

一、什么是端口映射:

端口映射就是将外网主机的IP地址的一个端口映射到内网中一台机器,提供相应的服务。当用户访问该IP的这个端口时,服务器自动将请求映射到对应局域网内部的机器上。端口映射有动态和静态之分。
这里写图片描述
通俗一点来说,就是将此服务端进程的内网访问入口映射到外网端口,然后客户端进程只需要从外网的访问入口进入即可访问此服务端进程。

二、如何配置端口映射:

1.通过路由器配置
2.使用第三方软件如“花生壳”
注:编者用的是校园网,所以只能使用第三方软件进行端口配置。所以编者将重点讲一讲“花生壳”的配置方法
①官网下载花生壳:
这里写图片描述

②注册用户:
这里注册成功后会自动获得一个域名

这里写图片描述

③登录客户端
并点击内网穿透:
这里写图片描述

④设置内网穿透:
这里写图片描述

⑤设置完成

这里写图片描述

以后直接使用外网访问地址就行了。

注意:在使用端口映射的过程中,“花生壳”客户端需要一直处于开启状态,否则,端口映射将失效。

//客户端代码
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;

public class ClientSocketTest {

    public static void main(String[] args)throws IOException{
        InetAddress inetAddress = InetAddress.getByName("外网ip");
        String hostAddr = inetAddress.getHostAddress();
        System.out.println("host addr:"+hostAddr);
        int port = 28621;//这里填外网访问端口
        Socket clientSocket = new Socket(hostAddr,port);
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        BufferedReader reader = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
        PrintWriter writer = new PrintWriter(new OutputStreamWriter(clientSocket.getOutputStream()), true);
        String str = null;
        while(true){
            str = in.readLine();
            writer.println(str);
            if(str.equals("quit"))
                break;
            System.out.println(reader.readLine());
        }
        clientSocket.close();
        in.close();
        reader.close();
        writer.close();
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值