JavaSE入门项目,WebSocket聊天室的实现(一)

JavaSE入门项目,WebSocket聊天室的实现(一)

你好! 我同样是一个正在入门的程序员,经过本科四年时间的浪费,“实至名归”的还是一名菜菜,我不避讳,但是终有一天我会变强。
这篇文章开始介绍一个学完JavaSE的内容之后可以练习的项目,WebSocket聊天室的实现。

项目准备

网络协议这些东西就不赘述了,因为让我说我也说不清,这些可以通过查询,计算机网络的分层,TCP/UDP的连接。这里就说一下该项目ServerSocket和Socket、以及可以学习到的内容。

  1. ServerSocket: 可以将Socket理解为一个通道,ServerSocket顾名思义就是服务器端的通道,可以将ServerSocket理解为一个水池。
  2. Socket: 可以将Socket理解为一个水龙头,当用户需要水(获取信息),就需要将水龙头与水池用水管连接(访问服务器,建立连接)。

涉及的知识点

网络通信,线程同步,JavaSE基本语法,异常,static关键字,获取用户输入……

了解服务器与客户端的连接过程

客户端

//服务器端创建端口,就像水池创建一个供水龙头连接的接口
ServerSocket serverSocket = new ServerSocket(8888);
//获取客户端套接字,就开始等待客户端的连接,类似一个监听
Socket socket = serverSocket.accept();

客户端

//连接服务器端创建的端口,就像水龙头连接上了水池
Socket socket = new Socket("127.0.0.1",8888);

这时候服务器端(水池)与客户端(水龙头)就可以实现信息(水)的流通了。
但是怎么使用这样一个联通建立通信呢(让水龙头里面的水流通起来)?

接下来就涉及到IO流的操作了,先实现一个简单的功能就是客户端发送信息,服务端接收并打印出来。

客户端

//(1)socket.getOutputStream()获取输出流
DataOutputStream dataOutputStream = new DataOutputStream(socket.getOutputStream());
//创建数据字节输出流,给输出流带上信息
dataOutputStream.writeUTF("在吗?");

客户端

//获取输入流
DataInputStream dataInputStream = new DataInputStream(socket.getInputStream());
//获取客户端送过来的输出流之后读输出流中的信息
String message = dataInputStream.readUTF();
//接着就可将输出流中获取的信息打印出来了
System.out.println(message);

代码

public static void main(String[] args) {
		//客户端
		//创建ServerSocket
		try {
			/*创建ServerSocket(服务端套接字)并指定端口号
			 * 在同一台电脑上不可以发布一个端口多次
			 */
			ServerSocket serverSocket = new ServerSocket(9999);
			
			System.out.println("----服务器暴露成功----");
			/*通过服务端套接字 监听客户端的连接 如果没有客户端连接,
			 * 那么程序会一直停留在此处,accept方法返回值就是客户端的套接字
			 * 通过套接字获取客户端交互
			*/
			Socket socket = serverSocket.accept();
			//获取客户端套接字,获取对应的输入流,通过此输入流就能拿到客户端发送过来的信息
			InputStream inputStream = socket.getInputStream();
			
			//将属于字节流包装成数据字节输入流
			DataInputStream dataInputStream = new DataInputStream(inputStream);
			String message = dataInputStream.readUTF();
			System.out.println("客户发送的信息:"+message);
			
			System.out.println("----程序执行完毕----");
		}catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
}
public static void main(String[] args) {
		//客户端
		try(Socket socket = new Socket("127.0.0.1",8888);
			DataOutputStream dataOutputStream = new DataOutputStream(socket.getOutputStream());
				) {
			//创建客户端套接字,用于交互服务端
			//创建数据字节输出流
			dataOutputStream.writeUTF("在吗?");
		}catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Outlier9527

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值