这个程序现在来看简直就是弱爆了。。。勿看,没有参考价值
写一个socket,多线程相关的练习。
就是经典的客户端服务器聊天例子啦
看了一些写法,也不知道哪个是对的
在服务器端维护了一个请求list,每个客户端的请求服务器端新起一个Thread
当客户端退出时将该thread从list中去除
该什么时候去删除,怎么去删除。。。不会了
请各位指点下,谢谢了
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.EOFException;
import java.io.IOException;
import java.net.BindException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class ChatServer {
List<Client> clients = new ArrayList<Client>();
public static void main(String[] args) {
new ChatServer().start();
}
public void start() {
boolean started = false;
ServerSocket ss = null;
try {
ss = new ServerSocket(8888);
started = true;
} catch (BindException e) {
System.out.println("端口正在被使用,请关闭相应程序!");
System.exit(0);
} catch (IOException e) {
e.printStackTrace();
}
try {
while (started) {
Socket s = ss.accept();
Client c = new Client(s);
clients.add(c);
System.out.println("a client connected!");
new Thread(c).start();
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
ss.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* 每个请求过来启用一个线程来处理<br>
*/
private class Client implements Runnable {
Socket socket = null;
DataInputStream dis = null;
DataOutputStream dos = null;
boolean connected = false;
Client(Socket s) {
try {
this.socket = s;
dis = new DataInputStream(s.getInputStream());
dos = new DataOutputStream(s.getOutputStream());
connected = true;
} catch (IOException e) {
e.printStackTrace();
}
}
public void run() {
while (connected) {
try {
Iterator<Client> it = clients.iterator();
String msg = dis.readUTF();
while (it.hasNext()) {
Client c = it.next();
c.send(msg);
}
} catch (EOFException eof) {
connected = false;
// 需要在序列中将退出的client去除,
// 迭代过程中
// 不能使用Collection本身的remove方法,
// 会抛出java.util.ConcurrentModificationException
// 使用iterator的remove方法
} catch (IOException e) {
e.printStackTrace();
}
}
}
private void send(String str) throws IOException {
dos.writeUTF(str);
}
}
}
分享到:
相关推荐
socket 多线程 练习的例子 没事还得多看看
练习\Socket和多线程编程的聊天程序实现
本文实例讲述了python socket多线程通讯方法。分享给大家供大家参考,具体如下: #!/usr/bin/evn python """ 这是一个Socket+多进程的例子(聊天服务端) """ import socket import threading # 处理中文数据用的 ...
一、程序功能可以实现多台电脑互通消息,且利用多线程实现一台服务器与多台客户端的连续对话二、关键代码块主要模块socket与threading1.客户端实现:socket.connect(),socket.send(),socket.recv()2.服务器实现:...
学习C#form的时候编写的简单小程序,不算成熟不能用于商业,对于多线程,事件,网络编程,socket编程练习非常有帮助
一个很好的练习Socket和多线程编程的例子,通过Socket,一个线程用于接收消息,另一个用于回复消息, 分为Server 和Customer 端!
一个简单Java Socket,multi-thread 的练习。是上学时的作业。 服务器实现了多线程并发处理来自客户端的算术请求。 初学套接字编程 和 多线程编程的可以看看。 请用jdk1.6以上。
在研究C#IM的过程中,循序渐进的学习和研究C#网络编程,写成了本C#异步多线程文件传输和文字聊天系统,对刚刚学习网络编程的人有一定的帮助,因为是练习作品,所以请大家莫拍砖。
本项目是一套基于java Swing 框架使用socket技术开发的即时通讯系统,主要针对计算机相关专业的正在做bishe的学生和需要项目实战练习的Java学习者。 包含:项目源码、数据库脚本等,该项目可以直接作为bishe使用。 ...
我自己练习用的LINUX的习题问答程序。软件尚有bug,但是90%可用。...主要使用socket、tcp、多进程、多线程、IO以及sqlite3的练习。client.C中需要自己设定配置本机的IP。可以自行扩充数据库,修改代码。
本人主要想练习一下socket c++ 多线程编程, 这个项目想要实现的工能是:这是一个服务器,运行先等待 client的连接,当有 client连接,服务器创建一个线程!主线程是还是等待 client发送的信息,创建的线程也是做...
java网络编程——网络版题库程序(主要技术java+socket+多线程+mysql),程序是C/S 版本的,由于服务器端是java写的,所有客户端使用android也是很容易与服务器对接的
能够完成多线程的用户聊天程序。 三、 实现技术 a) 使用ServerSocket、Socket完成服务端和客户端的连接。 b) 服务端使用多线程的方式可以接受多个客户端。 c) 使用对象的方式,在服务端和客户端之间传送数据。
java聊天室,采用socket,支持多人聊天,多线程练习代码,初学者学习适用
java多线程tcp socket server源码该文件夹包含许多不同的子文件夹,其中存储了我在学习期间一直在进行的各种项目。 有我在 SAP Labs France 的 6 个月实习、Eurecom 学期项目、练习以及与不同编程语言的软件开发相关...
用j2se写的一个简单的聊天系统,写了客户端和服务器。用到了socket,流读写技术,服务器端采用了多线程等技术。基本上涵盖了j2se中所有学到的技术,非常适合学习了j2se的初学者练习使用。
能够完成多线程的用户聊天程序。 三、 实现技术 a) 使用ServerSocket、Socket完成服务端和客户端的连接。 b) 服务端使用多线程的方式可以接受多个客户端。 c) 使用对象的方式,在服务端和客户端之间传送数据。
刚刚才学的Socket技术,借鉴了不少大神的博客和源码,然后自己试着做了一个练习,虽然还有很多不完善的地方,但是最基本的应用还算马马虎虎。
3 多人聊天编程实验(Chat 实验) 套接字(Socket)的多线程编程方法 4 应用层实验 HTTP、FTP、SMTP、POP3 等协议的使用 5 文件传输实验 学习利用套接字传送文件 1 二层交换机实验 掌握二层交换机的基本配置和使用...