Java网络编程——利用Socket实现简单的网上聊天功能

原创 2016年05月31日 16:10:17

一、聊天功能的实现

之前的文章里学习了Java中Socket编程的一些基本内容,现在简单写一个小程序,能够实现服务器端和客户端的聊天的功能。


服务器端:

Server.java

public class Server {
	public static void main(String[] args) throws IOException {
		ServerSocket server = null;
		Socket client = null;
		InputStream in = null;
		InputStreamReader reader = null;
		BufferedReader bufReader = null;
		OutputStream out = null;
		PrintWriter writer = null;
		Scanner scanner = new Scanner(System.in);
		boolean end = false;
		try {
			//1、创建服务器端socket,并绑定端口,绑定端口之后服务器一直监听该端口
			server = new ServerSocket(9999);
			System.out.println("------服务器端启动,开始监听客户端的信息,发送bye结束聊天------");
			
			while(true) {
				//2、接收到客户端请求,建立连接
				client = server.accept();
				//3、获取客户端的请求信息并解析
				in = client.getInputStream();
				reader = new InputStreamReader(in);
				bufReader = new BufferedReader(reader);
				String msg = null;
				while((msg = bufReader.readLine()) != null) {
					System.out.println("客户端说:" + msg);
					if("bye".equals(msg.trim().toLowerCase())) {
						end = true;
						break;
					}
				}
				//4、关闭输入流
				client.shutdownInput();
				if(end) {
					System.out.println("------聊天结束------");
					return;
				}
				
				System.out.print("我说:");
				String myMsg = scanner.nextLine();
				//5、通过输出流向客户端发送信息
				out = client.getOutputStream();
				writer = new PrintWriter(out);
				writer.write(myMsg);
				writer.flush();
				//6、关闭输出流
				client.shutdownOutput();
				if("bye".equals(myMsg.trim().toLowerCase())) {
					System.out.println("------聊天结束------");
					return;
				}
			}		
			
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			//7、程序结束一定要关闭相关资源
			if(in != null)
				in.close();
			if(reader != null) 
				reader.close();
			if(bufReader != null)
				bufReader.close();
			if(out != null)
				out.close();
			if(writer != null)
				writer.close();
			if(scanner != null)
				scanner.close();
			if(client != null)
				client.close();
			if(server != null)
				server.close();
		}
	}
}
客户端:

Client.java

public class Client {
	public static void main(String[] args) throws IOException {
		Socket client = null;
		InputStream in = null;
		InputStreamReader reader = null;
		BufferedReader bufReader = null;
		OutputStream out = null;
		PrintWriter writer = null;
		Scanner scanner = new Scanner(System.in);
		boolean end = false;
		try {
			 System.out.println("------准备向服务器发送消息,发送bye结束聊天------");
			 while(true) {
				 //1、新建客户端socket,指明需要连接的服务器地址和端口号
				 //如果是本机,地址可以是localhost或者127.0.0.1
				 client = new Socket("127.0.0.1", 9999);
				 System.out.print("我说:");
				 //2、建立连接后,通过输出流向服务器端发送信息
				 String myMsg = scanner.nextLine();
				 out = client.getOutputStream();
				 writer = new PrintWriter(out);
				 writer.write(myMsg);
				 writer.flush();
				 //3、关闭输出流
				 client.shutdownOutput();
				 if("bye".equals(myMsg.trim().toLowerCase())) {
					 System.out.println("------聊天结束------");
					 return;
				 }
				 
				 //4、通过输入流获取服务器端的响应
				 in = client.getInputStream();
				 reader = new InputStreamReader(in);
				 bufReader = new BufferedReader(reader);
				 String msg = null;
				 while((msg = bufReader.readLine()) != null) {
					 System.out.println("服务器说:" + msg);
					 if("bye".equals(msg.trim().toLowerCase())) {
						 end = true;
						 break;
					 }
				 }
				 //5、关闭输入流
				 client.shutdownInput();
				 
				 if(end) {
					 System.out.println("------聊天结束------");
					 return;
				 } 
			 }	
		} catch (UnknownHostException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			//6、程序结束一定要关闭相关资源
			if(in != null)
				in.close();
			if(reader != null) 
				reader.close();
			if(bufReader != null)
				bufReader.close();
			if(out != null)
				out.close();
			if(writer != null)
				writer.close();
			if(scanner != null)
				scanner.close();
			if(client != null)
				client.close();
		}
	}
}



版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

java网络编程一:Socket用法,简单模拟一对一聊天

1、socket和serverSocket通信简单介绍如下,注意客户端与服务器端是怎么交换数据的     2、模拟qq聊天功能,实现客户端与服务器(一对一)的聊天功能 服务器端代码: ...

java网络编程一:Socket用法,简单模拟一对一聊天

1、socket和serverSocket通信简单介绍如下,注意客户端与服务器端是怎么交换数据的     2、模拟qq聊天功能,实现客户端与服务器(一对一)的聊天功能 服务器端代码: p...

JAVA基础再回首(二十八)——网络编程概述、IP地址、端口号、TCP和UDP协议、Socket、UDP传输、多线程UDP聊天

JAVA基础再回首(二十八)——网络编程概述、IP地址、端口号、TCP和UDP协议、Socket、UDP传输、多线程UDP聊天 版权声明:转载必须注明本文转自程序员杜鹏程的博客:http://bl...
  • m366917
  • m366917
  • 2016年10月02日 15:32
  • 2063

Android网络编程之Socket通信实现简单聊天室

socket通信是基于底层TCP协议实现的,是一种可靠的网络连接,通过三次握手成功建立网络连接之后进行通信。这种服务端不需要任何的配置文件和tomcat就可以完成服务端的发布,使用纯java代码实现通...

Java——多人聊天室(基于TCP的网络编程——Socket)

Java——多人聊天室(基于TCP的网络编程——Socket) 服务端源代码: import java.awt.BorderLayout; import java.awt.event.Actio...

基于Socket的java网络编程(实现类似于QQ两人聊天的交互)

基于Socket的java网络编程 1,什么是Socket 网络上的两个程序通过一个双向的通讯连接实现数据的交换,这个双向链路的一端称为一个Socket。Socket通常用来实现客户方和服务方的连...

网络编程_TCP_Socket通信_聊天室_私聊_构思_实现JAVA193-194

一、S02E193_01网络编程TCP_Socket通信、聊天室、私聊、构思二、S02E194_01网络编程TCP_Socket通信、聊天室、私聊、实现...

Java使用socket网络编程实现多人聊天室

前言:套接字(socket)编程能够实现服务器和客户端的通信,以下通过Socket编程结合多线程实现多人聊天室。  程序展示:    界面类 1.客户端界面 ClientView.ja...

【Java网络编程】UDP协议实例——简单的在线聊天程序

package com.shaye.java.webtest; /* * 编写一个聊天程序 * 有收数据的部分,同时也能发送数据。 * 两部分需要同时执行,因此需要用到多线程技术。 */ /...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java网络编程——利用Socket实现简单的网上聊天功能
举报原因:
原因补充:

(最多只允许输入30个字)