java 使用TCP实现单聊的功能。(客户端和服务端聊天)

来源:互联网 发布:怎么复制淘宝上的图片 编辑:程序博客网 时间:2024/05/16 08:45

需求:

使用TCP实现单聊的功能。(客户端和服务端聊天)

代码:

package com.hcq.main2;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.OutputStreamWriter;import java.io.PrintWriter;import java.net.Inet4Address;import java.net.InetAddress;import java.net.Socket;import java.net.UnknownHostException;import com.hcq.main2.Server.receiverMsg;import com.hcq.main2.Server.sendMsg;public class Client {/** * 使用TCP实现单聊的功能。(客户端和服务端聊天) *  * @param args */public static void main(String[] args) {try {System.out.println("创建客户端,并连接服务端...");InetAddress byName = InetAddress.getByName("10.3.155.220");Socket socket = new Socket(byName, 9408);sendMsg sm = new sendMsg(socket);receiverMsg rm = new receiverMsg(socket);Thread t1 = new Thread(sm);Thread t2 = new Thread(rm);t1.start();t2.start();// socket.close();} catch (UnknownHostException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}// 客户端发送信息给服务器static class sendMsg implements Runnable {private Socket socket;private PrintWriter pw;public sendMsg(Socket socket) {super();this.socket = socket;}@Overridepublic void run() {try {pw = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()), true);while (true) {pw.println(InputUtils.inputStr("客户端说: "));}} catch (IOException e) {e.printStackTrace();}}}// 客户端接收服务器信息static class receiverMsg implements Runnable {private Socket socket;private String name;public receiverMsg(Socket socket) {super();this.socket = socket;this.name = socket.getInetAddress().getHostName();}@Overridepublic void run() {try {InputStream is = socket.getInputStream();InputStreamReader isr = new InputStreamReader(is);BufferedReader br = new BufferedReader(isr);while (true) {String readLine = br.readLine();if (readLine == null) {break;}System.out.println(name + " 说: " + readLine);}} catch (IOException e) {e.printStackTrace();}}}}

package com.hcq.main2;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.OutputStreamWriter;import java.io.PrintWriter;import java.net.InetAddress;import java.net.ServerSocket;import java.net.Socket;public class Server {public static void main(String[] args) {try {System.out.println("创建服务端...");ServerSocket serverSocket = new ServerSocket(9808);System.out.println("等待客户端连接...");// 连接成功,返回一个Socket:对客户端的描述Socket socket = serverSocket.accept();System.out.println("客户端已连接...");sendMsg sendMsg = new sendMsg(socket);receiverMsg receiverMsg = new receiverMsg(socket);Thread t1 = new Thread(sendMsg);Thread t2 = new Thread(receiverMsg);t1.start();t2.start();serverSocket.close();} catch (IOException e) {e.printStackTrace();}}// 服务器发送信息给客户端static class sendMsg implements Runnable {private Socket socket;private PrintWriter pw;public sendMsg(Socket socket) {super();this.socket = socket;}@Overridepublic void run() {try {OutputStream os = socket.getOutputStream();pw = new PrintWriter(new OutputStreamWriter(os), true);while (true) {pw.println(InputUtils.inputStr("服务器请说: "));}} catch (IOException e) {e.printStackTrace();}}}// 服务器接收客户端信息static class receiverMsg implements Runnable {private Socket socket;private String name;public receiverMsg(Socket socket) {super();this.socket = socket;this.name = socket.getInetAddress().getHostName();}@Overridepublic void run() {try {InputStream is = socket.getInputStream();BufferedReader br = new BufferedReader(new InputStreamReader(is));while (true) {String readLine = br.readLine();if (readLine == null) {break;}System.out.println(name + " 说: " + readLine);}} catch (IOException e) {e.printStackTrace();}}}}

package com.hcq.main2;import java.util.Scanner;public class InputUtils {// 接收输入字符串方法public static String inputStr(String tip) {System.out.println(tip);Scanner sc = new Scanner(System.in);return sc.next();}}


截图:




阅读全文
0 0