昨天写了一个回显服务器,今天在回显服务器的基础上开发了一个简易的聊天程序。比较简易,存下代码。
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()
{
@Override
public 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;
}
@Override
public 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;
}
@Override
public 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 );
}
}
分享到:
相关推荐
【标题】:“一个简单聊天程序” 【描述】:“很好用啊 ....” 这个简短的描述表明我们正在讨论的是一款简单的聊天程序,它可能具有易用性,并且在实际使用中得到了用户的好评。通常,这样的程序允许用户通过网络...
标题中的“用VC做的一个简单聊天程序”指的是使用Microsoft Visual C++(简称VC)开发的一款基本的聊天应用程序。VC是一个集成开发环境,主要用于编写C++代码,它提供了丰富的库支持和调试工具,使得开发者能够创建...
在这个"ASP.NET 做的一个简单聊天程序(TcpListener)"项目中,开发者使用了.NET框架下的TcpListener类来实现一个简单的聊天服务。TcpListener是System.Net.Sockets命名空间中的一个类,它负责监听特定端口上的TCP连接...
【标题】"MFC编写的简单聊天程序"指的是利用Microsoft Foundation Classes (MFC)库开发的一个基础级聊天应用程序。MFC是微软为Windows操作系统提供的一个C++类库,它简化了Windows API的使用,使开发者能够更高效地...
在这个“QT简单聊天程序”中,我们有两个主要部分:ChatServer和ChatClient,分别代表服务端和客户端。 **服务端(ChatServer)** 1. **QTcpServer**: 服务端的核心是`QTcpServer`类,它负责监听来自客户端的TCP...
这是用Java编写的简单聊天程序 可供初学者下载学习
我用JAVA的servlet写的这个小聊天程序,总共才几KB,但可以在不同的电脑上进行多人对话,删除记录等,我把数据库验证登陆写进去了,你若不想要这个登陆程序...这个程序结构清析,看了后你也可以自己动手写聊天程序了。
通过本文的学习,我们了解了一个简单聊天程序的构建过程,包括环境准备、用户界面设计以及连接逻辑等方面的知识点。虽然这是一个较为基础的例子,但它为深入学习更复杂的即时通讯系统打下了良好的基础。未来,随着...
在这个"UDP简单聊天程序示例"中,我们将探讨如何利用C#中的`UdpClient`类来实现一个简单的UDP聊天应用。 首先,我们要理解`UdpClient`类在.NET Framework中的作用。`UdpClient`是System.Net.Sockets命名空间下的一...
从给定的文件信息中,我们可以提取到关于网络...通过以上步骤,可以实现一个基础的网络聊天程序,其中涉及到了网络通讯的基本原理、TCP/IP协议的应用以及Socket控件的实际操作,为学习网络编程提供了很好的实践案例。
以上就是Java编写的简单聊天程序可能涉及的关键技术点。实际的聊天程序可能会更复杂,包括用户认证、消息加密、聊天记录存储等功能,但这些基本概念构成了此类程序的基础。通过学习和实践这些知识点,你可以构建出...
本篇文章将详细讲解如何利用Java编写一个最简单的聊天程序。 首先,我们需要理解Java中的基本概念。Java是一种面向对象的语言,它的核心特性包括封装、继承和多态性。在构建聊天程序时,我们将主要使用面向对象的...
【标题】"简单的聊天程序"揭示了这是一个基于Java编程语言构建的初级聊天应用程序。这个程序设计用于在两台计算机之间进行一对一的实时通信,提供基本的文本消息传递功能。通过这个程序,用户可以理解如何使用Java来...
设计一个简单的TCP聊天程序,我们需要考虑以下几个关键步骤: 1. **服务器端实现**:服务器端需要监听特定的端口,等待客户端的连接请求。在C++或Python等编程语言中,我们可以使用socket库来创建服务器套接字,并...
采用面向对象软件工程中的框架制作的一个简单聊天程序,实现一些基本的聊天功能,可以在这个基础上继续进行修改,增加相关的功能。使用方法,1、在eclipse中新建一个工程(如,myChat),2、把simpleChat下的所有文件...
【描述】:“有界面的简单聊天程序 可以实现多人聊天” 描述进一步确认了该程序的主要特性,即不仅具备用户友好的图形界面,还允许多用户参与同一聊天室进行对话。这暗示了程序可能采用了客户端-服务器架构,其中...
在这个“java写的简单聊天程序”中,我们主要关注的是如何使用Java来实现一个基本的多线程聊天应用。下面将详细探讨相关知识点。 首先,我们来看`Server.java`。在服务器端,一般会创建一个监听线程,用于接收...