博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java Soket编程(三)
阅读量:7239 次
发布时间:2019-06-29

本文共 4744 字,大约阅读时间需要 15 分钟。

简单实现聊天功能:

必须客户端先发消息。

服务器端:

package com.robert.view;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.ServerSocket;import java.net.Socket;import java.util.Scanner;import com.robert.view.CustomerClient.ReadThreadHandler;public class ServerClient {	ServerSocket serverSocket = null;	Socket clientSocket = null;	Socket socket = null;	InputStream inputStream = null;	BufferedInputStream bis = null;	DataInputStream dis = null;	OutputStream outputStream = null;	BufferedOutputStream bos = null;	DataOutputStream dos = null;	public static void main(String[] args) {		ServerClient serverClient = new ServerClient();		serverClient.communicate();	}	public void communicate() {		try {			serverSocket = new ServerSocket(9999);			while (true) {				socket = serverSocket.accept();				Runnable threadHandler = new ThreadHandler(socket);				Thread thread = new Thread(threadHandler);				thread.start();				Runnable readThreadHandler = new ReadThreadHandler(socket);				Thread readThread = new Thread(readThreadHandler);				readThread.start();			}		} catch (IOException e) {			e.printStackTrace();		}	}	class ThreadHandler implements Runnable {		private Socket socket;		public ThreadHandler(Socket socket) {			this.socket = socket;		}		@Override		public void run() {			try {				String input = "";				while (!"exit".equals(input)) {					outputStream = socket.getOutputStream();					bos = new BufferedOutputStream(outputStream);					dos = new DataOutputStream(bos);					Scanner scanner = new Scanner(System.in);					input = scanner.nextLine();					dos.writeUTF(input);					dos.flush();				}			} catch (IOException e) {				e.printStackTrace();			}		}	}	class ReadThreadHandler implements Runnable {		private Socket socket = null;		public ReadThreadHandler(Socket socket) {			this.socket = socket;		}		@Override		public void run() {			try {				String output = "";				while(!"exit".equals(output))				{					inputStream = socket.getInputStream();					bis = new BufferedInputStream(inputStream);					dis = new DataInputStream(bis);					output = dis.readUTF();					System.out.println("client:"+output);					}							} catch (IOException e) {				e.printStackTrace();			}		}	}}

客户端:

package com.robert.view;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.ServerSocket;import java.net.Socket;import java.net.UnknownHostException;import java.util.Scanner;public class CustomerClient {	OutputStream outputStream = null;	BufferedOutputStream bos = null;	DataOutputStream dos = null;	InputStream inputStream = null;	BufferedInputStream bis = null;	DataInputStream dis = null;	public static void main(String[] args) {		CustomerClient customerClient = new CustomerClient();		customerClient.communication();	}	public void communication() {		try {			Socket socket = new Socket("localhost", 9999);			Runnable writeThreadHandler = new WriteThreadHandler(socket);			Thread writeThread = new Thread(writeThreadHandler);			writeThread.start();			Runnable readThreadHandler = new ReadThreadHandler(socket);			Thread readThread = new Thread(readThreadHandler);			readThread.start();		} catch (UnknownHostException e) {			e.printStackTrace();		} catch (IOException e) {			e.printStackTrace();		}	}	class WriteThreadHandler implements Runnable {		Socket socket = null;		public WriteThreadHandler(Socket socket) {			this.socket = socket;		}		@Override		public void run() {			try {				String input = "";				while (!"exit".equals(input)) {					outputStream = socket.getOutputStream();					bos = new BufferedOutputStream(outputStream);					dos = new DataOutputStream(bos);					Scanner scanner = new Scanner(System.in);					input = scanner.nextLine();					dos.writeUTF(input);					dos.flush();				}			} catch (IOException e) {				e.printStackTrace();			}		}	}	class ReadThreadHandler implements Runnable {		private Socket socket = null;		public ReadThreadHandler(Socket socket) {			this.socket = socket;		}		@Override		public void run() {			try {				String output = "";				while (!"exit".equals(output)) {					inputStream = socket.getInputStream();					bis = new BufferedInputStream(inputStream);					dis = new DataInputStream(bis);					output = dis.readUTF();					System.out.println("server:" + output);				}			} catch (IOException e) {				e.printStackTrace();			}		}	}}

实现原理:

1.先建立一个Server端,然后客户端去连接该server。

2.取得对应端(server端,client端)的输入流和输出流。

3.发送消息,互相通信。

转载于:https://www.cnblogs.com/mengjianzhou/archive/2011/12/22/5986883.html

你可能感兴趣的文章
【Unity】9.2 如何添加粒子组件
查看>>
U盘容量足够,但在拷贝时提示“文件太大”无法拷贝时怎么办
查看>>
Android开源项目分类汇总
查看>>
解决windows7蓝屏的方法
查看>>
将NASM汇编器集成到Visual Studio中
查看>>
linux设置自动更换壁纸
查看>>
error: command 'x86_64-linux-gnu-gcc' failed with exit status 1
查看>>
pandas安装过程中提示unable to find vcvarsall.bat的解决方法
查看>>
RestTemplate--解决中文乱码
查看>>
launch edge和latch edge延迟
查看>>
关于Android studio Logcat显示不全,不显示自己需要打印的LOG数据
查看>>
微信小程序--问题汇总及详解之tab切换
查看>>
篇1 安卓app自动化测试-appium环境篇
查看>>
html5 拖拽练习题
查看>>
kvc(键-值编码)
查看>>
设置UITableView边框
查看>>
Spring JDBC 数据访问
查看>>
sql优化经历(转存+记录)
查看>>
工作所用的
查看>>
POJ 3061 Subsequence
查看>>