服务器类代码:
package chat
import java.io.*
import java.net.*
import java.util.*
/*服务器类*/
public class Server {
public List<Socket>socketList = new ArrayList<Socket>()//存放所有连接的客户端的集合
public ServerSocket server//服务器
public int portNum//端口号
public Server(int portNum){
this.portNum = portNum
}
public void innit(){
try {
server = new ServerSocket(portNum)
System.out.println("服务器开启成功!")
int socketNum = 0
while(true){
Socket socket = server.accept()/伍薯/被动等待客户端的连接
socketNum++
System.out.println("第"+socketNum+"个客户端连接成功!!")
socketList.add(socket)//连接的客户端存放到集腔差者合里面
new RWThread(socket).start()
}
} catch (IOException e) {
e.printStackTrace()
}
}
class RWThread extends Thread{//庆旅接收和发送消息的线程
public Socket socket
public RWThread(Socket socket){
this.socket = socket
}
public void run() {
super.run()
try {
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()))
while(true){
String message = br.readLine()
System.out.println(message)//接收客户端发来的消息
for(int i=0i<socketList.size()i++){//发送给所有连接的客户端
PrintWriter pw = new PrintWriter(new OutputStreamWriter(socketList.get(i).getOutputStream()))
pw.println(message)
pw.flush()
}
}
} catch (IOException e) {
e.printStackTrace()
}
}
}
public static void main(String[] args) {
int portNum = 8888//创建服务器的端口号
Server server = new Server(portNum)
server.innit()
}
}
客户端类:
package chat
import java.io.*
import java.net.*
import java.util.*
/*客户端类*/
public class Client {
public Socket socket
public Client(){
Scanner sca = new Scanner(System.in)
try {
socket = new Socket("127.0.0.1",8888)//创建客户端
new ReadThread(socket).start()//开启读取从服务器端发来的信息
while(true){
PrintWriter pw = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()))
String message = sca.nextLine()
pw.println(message)//向服务器发送信息
pw.flush()
}
} catch (UnknownHostException e) {
e.printStackTrace()
} catch (IOException e) {
e.printStackTrace()
System.out.println("错误:服务器未开启!!!")
}
}
class ReadThread extends Thread{//读取服务器发来信息的线程
public Socket socket
public ReadThread(Socket socket){
this.socket = socket
}
public void run() {
super.run()
try {
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()))
while(true){
String message = br.readLine()
System.out.println(message)//输出信息
}
} catch (IOException e) {
e.printStackTrace()
}
}
}
public static void main(String[] args) {
Client client = new Client()
}
}
现打开服务器类,然后可以打开多个客户端进行聊天
声明:本软件采用部分第三方控件,如果你因为使用第三方控件所引起的理论上或实际的损失与作乱乱者无关.
请安下列步骤使用此源代码:
1.本系统采用Delphi 6.0+ Microsoft Access 2000 开发而成.
2.先正确安装Delphi 6.0,Microsoft Access 2000
作哗亏档者强烈推荐Delphi 运行于 Windows 20000 Professional+Sp3
2.正确安装本光盘附带的 ABC控件包,ICS控件包,RX Library控件
包,Appbar控件,Tcaptionform控件,TinyDB控件,Dximagelist控件
,Acm_Component控件,DevExpress控件,AMHK控件等.(提供的控件全部
安装即可)。
3.客户端源程序:client/hyicq.dpr 工程文件(为系统的客户
端软件).说明:client/icqmend 工程文件为修正客户端数据文件用空祥
的,在每次正常退出客户端软件时运行.
4.服务器源程序:server/hyicqsado.dpr.
5.服务器补丁3源程序:server/hyicqsp3.dpr.
6.聊天室服务器源程序:server/chatserver.dpr.
7.数据模版文件可以用/tinydb/tools/TinyDB Desktop/dbd.exe打开.
密码为:705926.该文件主要用于客户端的聊天记录及用户资料.
说明:
1.本软件最佳运行环境,win9x/nt/2000,WINDOWS XP运行不稳定.
2.你可以对此源码做任何修改但不得散发此软件源码.
3.ABC控件组及TINYDB控件的安装可以打用delphi6.0 执行菜单 component>>
install pageages... ADD添加bpl文件.
4.你必须指定控件的路径,delphi6.0菜单中的.tools>>environment options...
选择library 添加library path.
类似QQ的聊天工具?有一种叫luma的QQ程序,是用java编写的,而且代码开放,适用于各种安装了java平台的计算机.不过好像已经不陵埋跟新了,可惜了.
腾讯官尺缓蚂方现在也提供了java版本的哪拦qq现在
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)