首页 > 代码库 > java socket编程--聊天小案例
java socket编程--聊天小案例
很久以前写过socket聊天室,都快忘完了,心血来潮又重新写一遍。
服务器端:
package com.fancy;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.PrintWriter;import java.net.ServerSocket;import java.net.Socket;import java.util.HashMap;import java.util.Map;public class Server { private int port; private ServerSocket server; private Map<String,PrintWriter> clients = new HashMap(); public Server() throws IOException { port = 10025; server = new ServerSocket(port); System.out.println("成功创建服务器端!"); startReceive(); } public void startReceive() throws IOException{ while(true){ Socket socket = server.accept(); //InetAddress address = socket.getInetAddress(); ClientHandler handler = new ClientHandler(socket); new Thread(handler).start(); } } public void sendMsg(String from,String str) throws IOException { for(String k:clients.keySet()){ if(k.equals(from)){ continue; } PrintWriter pw = clients.get(k); pw.println(str); pw.flush(); } } class ClientHandler implements Runnable{ private String nickname; private Socket socket; private PrintWriter pw; public ClientHandler(Socket socket){ this.socket = socket; } @Override public void run() { BufferedReader br = null; try { InputStream in = socket.getInputStream(); br = new BufferedReader(new InputStreamReader(in)); OutputStream out = socket.getOutputStream(); pw = new PrintWriter(out,true); String name = br.readLine(); this.nickname = name; if(!clients.containsKey(name)){ clients.put(name, pw); pw.println("欢迎新朋友:"+name+",当前在线人数:"+clients.size()); } String str; while((str = br.readLine())!=null){ if("exit".equalsIgnoreCase(str.trim())){ clients.remove(this.nickname); this.socket.close(); sendMsg("all", this.nickname+"下线了,当前在线人数:"+clients.size()); }else{ sendMsg(name,name+":"+str); } } } catch (Exception e) { e.printStackTrace(); } finally{ try { br.close(); } catch (IOException e) { } } } } public static void main(String[] args) { try { Server s = new Server(); } catch (IOException e) { e.printStackTrace(); } }}
客户端:
package com.fancy;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.PrintWriter;import java.net.Socket;import java.net.UnknownHostException;import java.util.Scanner;public class Client { private Socket socket; private boolean online = true; public Client() throws UnknownHostException, IOException { socket = new Socket("127.0.0.1", 10025); OutputStream out = socket.getOutputStream(); PrintWriter pw = new PrintWriter(out, true); Scanner scan = new Scanner(System.in); String word; ServerHandler hander = new ServerHandler(); new Thread(hander).start(); System.out.println("请输入您的昵称:"); word = scan.nextLine(); pw.println(word); pw.flush(); while((word=scan.nextLine())!=null){ pw.println(word); pw.flush(); if("exit".equalsIgnoreCase(word)){ online = false; break; } } } class ServerHandler implements Runnable{ @Override public void run() { while(online){ InputStream in; try { in = socket.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(in)); String back = br.readLine(); System.out.println(back); } catch (IOException e) { e.printStackTrace(); } } } } public static void main(String[] args) { try { Client c = new Client(); System.out.println("started!"); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }}
运行一次server,多次client的结果如下:
java socket编程--聊天小案例
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。