socket客户端和服务端程序连通本地主机和阿里云服务器的过程

下面过程针对本地主机使用无线路由器的情况下讲述:
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、回看服务器:
这里写图片描述

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值