读书人

一个简略的聊天程序

发布时间: 2012-08-27 21:21:57 作者: rapoo

一个简单的聊天程序

昨天写了一个回显服务器,今天在回显服务器的基础上开发了一个简易的聊天程序。比较简易,存下代码。

?

package in.sikaijian.easytalk;import java.io.BufferedReader;import java.io.InputStreamReader;import java.net.ServerSocket;import java.net.Socket;import java.net.SocketException;/** * easy talk server * @author sikaijian */public class EasyTalkServer {private final ServerSocket server;/** * initialize port * @param port * @throws Exception */public EasyTalkServer(int port) throws Exception{this.server = new ServerSocket(port);}/** * start up echo server */public void startUp(){System.out.println( "----easyTalk server start----" );System.out.println("listening on port : " + this.server.getLocalPort() + "...");Thread servThread = new Thread( new Runnable(){@Overridepublic void run(){/** * wait for request socket when a request come, start up a thread to handle the request */while (true){try{Socket client = EasyTalkServer.this.server.accept();Thread servThread = new Thread( new EchoThread( client ) );servThread.start();}catch (Exception e){e.printStackTrace();}}}} );servThread.start();}/** * request handler thread * @author sikaijian */private class EchoThread implements Runnable{private final Socket client;public EchoThread(Socket client){this.client = client;}@Overridepublic void run() {try {BufferedReader reader = new BufferedReader(new InputStreamReader(client.getInputStream()));System.out.println("request socket address : " + client.getRemoteSocketAddress());/* * server a request until socket closed by client and assume that client closed when exception * occurs */while(true){try {String line = reader.readLine();System.out.println( client.getRemoteSocketAddress() + " send message [ " + line + "]" );} catch (SocketException e) {if(client!=null){client.close();}break;}}} catch (Exception e) {e.printStackTrace();}}}}

?package in.sikaijian.easytalk;?

import java.io.BufferedReader;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.io.PrintWriter;import java.net.Socket;/** * easy talk client * @author sikaijian */public class EasyTalkClient {private String netWorkName;public void setNetWorkName(String name){this.netWorkName = name;}public void startAtalk(String talkToIp, int talkPort){Thread talk = new Thread( new Chart( talkToIp, talkPort ) );talk.start();}private class Chart implements Runnable{private final String ip;private final int port;public Chart(String ip, int port){this.ip = ip;this.port = port;}@Overridepublic void run(){PrintWriter out = null;BufferedReader netWorkIn = null;try{Socket theSocket = new Socket( ip, port );netWorkIn = new BufferedReader( new InputStreamReader( theSocket.getInputStream() ) );out = new PrintWriter( new OutputStreamWriter( theSocket.getOutputStream() ) );BufferedReader userIn = new BufferedReader( new InputStreamReader( System.in ) );System.out.println( "----Connect to " + ip + " server successed, input 'exit' to end a chart---" );while (true){String line = userIn.readLine();if (line.equals( "exit" ))break;out.println( EasyTalkClient.this.netWorkName + " say : " + line );out.flush();System.out.println( netWorkIn.readLine() );}}catch (Exception e){e.printStackTrace();}}}}

?package in.sikaijian.easytalk;

import java.io.BufferedReader;import java.io.InputStreamReader;public class EasyTalk{private final EasyTalkServer server;private final EasyTalkClient client;public static final int defaultServPort = 19891;public EasyTalk(int localServPort) throws Exception{server = new EasyTalkServer( localServPort );server.startUp();client = new EasyTalkClient();}public void startAtalk(String talkTo, int remoteServPort){client.startAtalk( talkTo, remoteServPort );}public void setName(String yourName){client.setNetWorkName( yourName );}public static void main(String[] args) throws Exception{System.out.println( "-------------Easy Talk Version 1.0---------------" );BufferedReader reader = new BufferedReader( new InputStreamReader( System.in ) );System.out.println( "Input your local server port : " );int localServPort = Integer.parseInt( reader.readLine() );EasyTalk aTalk = new EasyTalk( localServPort );System.out.print( "Input your name : " );String name = reader.readLine();System.out.print( "Input the ip you want to talk to : " );String talkTo = reader.readLine();System.out.print( "Input the remote server port : " );int remoteServPort = Integer.parseInt( reader.readLine() );System.out.println( "---Nice to meet you " + name + " your are talking to " + talkTo + "---" );System.out.println();aTalk.setName( name );aTalk.startAtalk( talkTo, remoteServPort );}}

读书人网 >编程

热点推荐