public class Server
{
//用来存储所有连接上来的客户
private List<ServerThread> clients;
public static void main(String[] args)
{
Server s = new Server();
s.startServer(9988);
}
public void startServer(int port)
{
ServerSocket ss = null;
Socket socket = null;
try
{
ss = new ServerSocket(port);
clients=new ArrayList<ServerThread>();
while (true)
{
System.out.println("waiting...");
socket = ss.accept();
ServerThread st = new ServerThread(socket);
new Thread(st).start();
}
}
catch (IOException e)
{
e.printStackTrace();
}
finally
{
SocketUtils.closeSocketServer(ss);
}
}
private class ServerThread implements Runnable
{
private Socket s = null;
private BufferedReader br;
private PrintWriter out;
private String address;
private String username;
private boolean flag;
public ServerThread(Socket s) throws IOException
{
this.s = s;
br = new BufferedReader(new InputStreamReader(s.getInputStream(),"utf-8"));
out = new PrintWriter(s.getOutputStream(),true);
username=br.readLine();
System.out.println("username="+username);
address = s.getInetAddress().getHostAddress() + ":" + s.getPort();
// System.out.println(name + "连接上来了");
clients.add(this);
send(username+"上线了");
}
private void stop()
{
System.out.println(username+"已经离开了");
clients.remove(this);
flag = false;
}
/**
* 接收用户的信息
*/
private void receive()
{
String str = null;
try
{
while ((str = br.readLine()) != null)
{
if (str.equalsIgnoreCase("quit"))
{
// 关闭
stop();
out.println("disconnect");
break;
}
String sendMsg=username+":"+str;
// out.println(username+":"+ str);
//给所有的用户发送信息
send(sendMsg);
System.out.println("out");
}
}
catch (IOException e)
{
stop();
System.out.println("用户非正常死亡->"+username);
}finally{
SocketUtils.closeSocket(s);
}
}
/**
* 给用户发信息
* @param msg
*/
private void send(String msg){
for(ServerThread st:clients){
st.out.println(msg);
}
}
public void run()
{
// if(!flag)break;
receive();
}
}
}
public class Client
{
private Socket s;
private BufferedReader br;
private PrintWriter out;
private boolean flag=true;
public static void main(String[] args)
{
Client c=new Client();
// c.sendMessage();
c.startup();
}
public void startup(){
BufferedReader sbr=null;
try
{
s=new Socket("127.0.0.1",9988);
//s=new Socket("115.28.240.213",9988);
out=new PrintWriter(s.getOutputStream(),true);
out.println("myname");
br=new BufferedReader(new InputStreamReader(s.getInputStream(),"utf-8"));
sbr=new BufferedReader(new InputStreamReader(System.in));
new Thread(new ClientThread()).start();
String str=null;
while((flag)&&(str=sbr.readLine())!=null){
if(!flag)break;
String msg=new String(str.getBytes("gbk"),"utf-8");
out.println(msg);
}
}
catch (UnknownHostException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
}
private void closeSocket(Socket s){
if(s!=null){
try
{
s.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
private void receive(){
try
{
String rs=br.readLine();
if(rs.equalsIgnoreCase("disconnect")){
flag=false;
System.out.println("按回车退出");
return ;
}
System.out.println(rs);
}
catch (IOException e)
{
e.printStackTrace();
}
}
private class ClientThread implements Runnable{
@Override
public void run()
{
while(true){
if(!flag)break;
receive();
}
}
}
}
分享到:
相关推荐
本资源是本人前面发过的一个局域网聊天工具的升级版。...代码保证可用,如有问题请留言,代码较规范,结构清晰,相信对学习java socket编程和swing界面开发的朋友有一定的帮助。 注:main函数在MainFrame类
本资源是本人前面发过的一个局域网聊天工具的升级版。...代码保证可用,如有问题请留言,代码较规范,结构清晰,相信对学习java socket编程和swing界面开发的朋友有一定的帮助。 注:main函数在MainFrame类
本次实验利用TCP/IP, 语言环境为 C/C++ 利用套接字Socket编程,以及线程处理, 实现Server/CLient 之间多人的聊天系统的基本功能。
具体功能有: 1.采用了全新的界面风格 2.实现了基本文字聊天功能 3.实现了基本文件传送功能 4.实现了发送窗口抖动的功能 5.实现了语音聊天的功能 注:main函数在MainFrame类
2.2 Socket编程的基本流程 8 2.3 Socket编程的常用API 9 第三章 Java Socket编程实现 11 3.1 Java Socket编程的实现原理 11 3.2 Java Socket编程的实现步骤 13 3.3 Java Socket编程的实现技巧 14 第四章 Java聊天室...
通过socket编程,实现qq基本界面,可以添加删除好友,聊天等功能
我想开发一个集群功能,查到用CSocket来实现比较可行,于是先用本程序进行了基本通讯的测试。通过服务端向客户端发送信息,由客户端处理后返回信息。 本程序包括了基本的服务端、客户端功能,实现了服务端与客户端...
本文用跨平台且具有强大网络编程功能的JAVA语言,实现了一个聊天系统。本系统采用客户机/服务器架构模式,数据库管理系统用SQL Server2000完成,并通过JDBC-ODBC桥访问数据库。本聊天系统可以实现多人对多人的聊天,...
聊天程序 JavaSocket编程,类似QQ的聊天程序(注册、登陆、聊天等) 1、界面模仿QQ界面,能够发起一对一聊天、接受聊天请求; 2、能够以当前日期和时间(精确到分)命名的文件来保持聊天记录; 3、能够调出聊天记录...
利用Java 语言的Socket编程实现网络环境下两台计算机之间的字符聊天功能。一个QQ系统由一个服务器和若干个客户端组成。服务器和叫客户端之间通过TCP/IP网络协议通信。客户端的为用户服务的。客户端的功能:一是用户...
基于socket的TCP通讯是window编程的基本技术,通过该案例研究学习可以在掌握面向对象编程方法的同时,对通用协议进行了解。同学们可视时间、精力完成不同复杂程度的程序 为原创,引用时请注明出处。
暂时仅仅设计了以下几个功能点: 1.点对点单人聊天; 2.多人在线同时聊天; 3.用户可以自由加入和退出系统; 4.具备用户在线状态监听;
它实现了聊天的基本功能,支持多个客户端以不同的用户名同时登录服务器,每个客户端可以随时同服务器断开。 服务端方面也添加了历史记录,可根据个人需要自行修改! 功能上包括信息的实时刷新等等,其他的自己看了...
socket编程实现的聊天程序,最基本的一个用c#实现的程序。
这个小型的聊天系统我没有用swt去做出界面出来,因为之前用的32位的,现在换了个环境导致之前的包不能用了,只能以控制台进行信息的交互。另外,这里介绍的是基于TCP的,UDP的简单一些就不介绍了。 基本代码 服务端 ...
基于Linux socket函数及系统函数编写的小型网络聊天室,实现了单聊,多聊,群聊的基本功能,及显示在线人数,代码本人写的,可直接运行,是学习网络编程和系统编程的好的代码。
本文讨论了如何利用java技术开发聊天室系统,基本满足了结构化、界面友好、速度快、安全性以及稳定性等特点。 系统着重研究并实现了网络应用的部分。根据实现的情况看,具有较友好的聊天界面生成效果,以及流畅的...
在学习网络编程时编写的一个仿飞鸽的局域网聊天程序。支持好友添加,好友上线通知,下线通知,点对点聊天,群聊等基本功能。
最基本的聊天程序,UDP实现,Socket,便于零基础者初步学习网络套接字编程(注释清晰)
Android简易聊天室源代码(基本实现了聊天室的功能,包括好友列表,信息列表,Android相关数据库,Socket编程以及java端sqlite数据库的使用):