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网络编程实现多人聊天室

前言:套接字(socket)编程能够实现服务器和客户端的通信,以下通过Socket编程实现多人聊天室。 程序展示: 界面类1.客户端界面 ClientView.javapublic class...
  • u010429311
  • u010429311
  • 2016年01月21日 19:52
  • 4515

项目总结——深入浅出socket网络编程

前言:     为什么会有如题的概念呢,我想对于没有主动听说过socket网络编程的人来说读到题目可能就已经蒙头了,为了很好的让大家进入场景,首先说一下一个需要用到这点东西的业务需求。    ...
  • hy6688_
  • hy6688_
  • 2013年09月30日 00:54
  • 7328

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

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

java Socket实现简单聊天室

这几天重拾java,整理资料正好发现3年前,用java写的一个很low 的聊天室,还是跟大家分享一下吧,自己也回顾回顾。 LoginFrame.javapackage com.java; impor...
  • SkySuperWL
  • SkySuperWL
  • 2016年08月07日 20:24
  • 2791

java socket编程(3)——利用socket实现聊天之群聊

上一篇 java socket编程(2)——利用socket实现聊天之单聊 中我们讲到如何使用socket让客户端和客户端之间传递消息,实现一对一的聊天,接下来我将写出如何让服务器建立客户端与客户端...
  • yehui928186846
  • yehui928186846
  • 2016年09月21日 11:05
  • 2909

Java网络编程 - 浅析web服务器与浏览器的实现原理

我们基本每天都在通过WEB浏览器,去浏览一些新闻,看看视频之类的。 众所周知,这就是所谓的B/S结构(Browser/Server,浏览器/服务器模式),是WEB兴起后的一种网络结构模式,WEB浏览器...
  • ghost_Programmer
  • ghost_Programmer
  • 2015年02月03日 10:34
  • 4911

java实现的基于TCP网络编程步骤

参考 java 程序设计教程(第二版)雍俊海老师编著的书12章 服务器端程序设计模型的建立通常由如下五个步骤组成: (1)在服务器端,首先要创建ServerSocket的实例对象,注册在服务器端进...
  • u012270113
  • u012270113
  • 2014年03月30日 23:29
  • 2188

网络编程学习笔记二(实现一个基于简单TCP的用户注册程序)

•实现一个基于简单TCP的用户注册程序,实现下列功能 –客户端发送用户注册信息(用户名、密码和其他资料)到服务器端; –服务器端首先检查用户注册数据是否符合格式。如不符合则返回“非法访问”提示; –如...
  • letianxf
  • letianxf
  • 2017年02月24日 15:20
  • 779

JAVA通过Swing和socket编程实现简易点对点聊天

一、窗口的制作;因为有了myeclipse所以窗口界面的制作就不需要手工写代码了。下面是我做的效果图: 二、界面做出来了,接下来就是写实现功能的代码了。        首先,整理下...
  • twomr
  • twomr
  • 2015年04月13日 21:22
  • 3394

JAVA学习笔记(六十)- 网络编程登录实例

客户端import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import jav...
  • wangzi11322
  • wangzi11322
  • 2015年04月06日 09:10
  • 2003
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java网络编程——利用Socket实现简单的网上聊天功能
举报原因:
原因补充:

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