下面过程针对本地主机使用无线路由器的情况下讲述:
1、在浏览器搜索框里输入“IP”,得到一个ip地址,拿到后,在cmd里进行ping操作,如果能ping通,则运营商给的是公网ip(这个ip并不固定),如不能则是子网ip,找软件进行穿透;
2、
客户端程序:
import java.net.Socket;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.IOException;
import java.net.UnknownHostException;
public class Demo1_Client {
public static void main(String[] args) throws UnknownHostException, IOException {
/*
*创建Socket连接服务端(指定IP地址,端口号),通过IP地址找对应的服务器
*12001是自己指定的端口,应尽量大
*/
Socket socket = new Socket("阿里云服务器的外网ip", 12001);
//调用getInputStream()获取客户端输入流
InputStream is = socket.getInputStream();
//调用getOutputStream()获取客户端输出流
OutputStream os = socket.getOutputStream();
//用输入流读取服务端输出流写出的数据
byte[] arr = new byte[1024];
int len = is.read(arr);
System.out.println(new String(arr, 0, len));
//输出流写出数据到服务端的输入流
os.write("瞅你咋地!!!".getBytes());
//关闭Socket
socket.close();
}
}
服务端程序:
import java.net.ServerSocket;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.IOException;
public class Demo1_Server {
public static void main(String[] args) throws IOException{
//创建ServerSocket(需要指定端口)
ServerSocket server = new ServerSocket();
server.bind(new InetSocketAddress("阿里云服务器的私网ip", 12001));
//调用ServerSocket的accept()方法接受一个客户端请求,得到一个Socket
Socket socket = server.accept();
//调用getInputStream()获取客户端输入流
InputStream is = socket.getInputStream();
//调用getOutputStream()获取客户端输出流
OutputStream os = socket.getOutputStream();
//输出流写出数据到客户端的输入流
os.write("你瞅啥?".getBytes());
//输入流可以读取客户端输入流写出的数据
byte[] arr = new byte[1024];
int len = is.read(arr);
System.out.println(new String(arr, 0 , len));
//关闭Socket
socket.close();
}
}
将服务端程序拷贝至服务器上;
3、进入阿里云服务器管理控制台,找到“安全组”,对端口12001进行安全组规则的配置,步骤如下:
1)、点击“添加安全组规则”
2)、跳出如下页面,并填入如下信息:
优先级一栏,数值越小,优先级越高;授权对象“0.0.0.0/0”表示允许或拒绝所有IP地址的访问,所以请谨慎设置。
添加安全组规则详情,请见:添加安全组规则
3、远程连接至服务器(Windows Server 2012),打开指定的端口,步骤如下:
1)、控制面板——>系统和安全——>Windows防火墙——>高级设置——>入站规则
2)、点击新建规则:
3)、选择“端口”:
4)、下一步,在“特定本地端口”输入程序所指定的端口(即所要打开的端口)
5)、下一步,选择“允许连接”,下面的“何时应用规则”,根据自己的需要进行选择,即可;然后填入名称和描述。
6)、注意此时,通过下面的命令是无法明确端口是否打开的,如:netstat -na ,telnet 指定的端口号以及start /min telnet 127.0.0.1 指定的端口号,因为没有程序的运行使用到端口,所以运行上面的程序无法检测。
运行“netstat -na ”后,
可以看到并没有12001端口。
4、在装好jdk,并设置好环境变量的情况下,运行程序:
再从cmd里运行“netstat -na”:
可以看到12001端口出现了。
5、本地主机运行,客户端程序:
6、回看服务器: