转载自:https://blog.youkuaiyun.com/ztyxy1115/article/details/78948868
此篇主要讲述网络编程如何实现本地聊天功能,和局域网之间的聊天功能
一、单人聊天
首先创建服务器,此处我们使用多线程分别实现读和写的功能,这样可以提高效率
服务器端的读的功能:
- package one;
- import java.io.BufferedReader;
- import java.io.IOException;
- import java.io.InputStreamReader;
- import java.net.ServerSocket;
- import java.net.Socket;
- public class ServerTest {
- public static void main(String[] args) {
- try {
- ServerSocket serverSocket = new ServerSocket(8888);
- Socket socket = serverSocket.accept();//判断客户端是否连接上服务器,连接上通过Socket进行相互通信
- ServerThread th = new ServerThread(socket);
- th.start();//开启线程
- BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
- while(true){
- String message = br.readLine();
- System.out.println("读取客户端:"+message);
- }
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- }
服务器端写的功能:
- package one;
- import java.io.BufferedWriter;
- import java.io.IOException;
- import java.io.OutputStreamWriter;
- import java.net.Socket;
- import java.util.Scanner;
- public class ServerThread extends Thread{
- private Socket socket;
- public ServerThread(Socket socket) {
- super();
- this.socket = socket;
- }
- @Override
- public void run() {
- Scanner sc = new Scanner(System.in);
- try {
- BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
- while(true){
- String str = sc.nextLine();
- bw.write(str);
- bw.newLine();
- bw.flush();
- }
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- }
服务器端创建完成之后,下面就实现客户端的功能:
客户端的读取功能:
- package one;
- import java.io.BufferedReader;
- import java.io.IOException;
- import java.io.InputStreamReader;
- import java.net.Socket;
- import java.net.UnknownHostException;
- public class ClientTest {
- public static void main(String[] args) {
- try {
- Socket socket = new Socket("127.0.0.1", 8888);
- ClientThread th = new ClientThread(socket);
- th.start();
- BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
- while(true){
- String message = br.readLine();
- System.out.println("读取服务器端:"+message);
- }
- } catch (UnknownHostException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- }
客户端的写入功能:
- package one;
- import java.io.BufferedWriter;
- import java.io.IOException;
- import java.io.OutputStreamWriter;
- import java.net.Socket;
- import java.util.Scanner;
- public class ClientThread extends Thread{
- private Socket socket;
- public ClientThread(Socket socket) {
- super();
- this.socket = socket;
- }
- @Override
- public void run() {
- Scanner sc = new Scanner(System.in);
- try {
- BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
- while(true){
- String str = sc.nextLine();
- bw.write(str);
- bw.newLine();
- bw.flush();
- }
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- }
到此,单人聊天的功能都实现了,可以实现本地的聊天,如果想实现局域网内的聊天,只要把客户端的ip地址改成创建服务端的计算机的ip地址即可。