package chapter21_net;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Vector;
public class MultiObjectServer extends Thread {
ServerSocket server;
Vector<Conversation> conversations;
public MultiObjectServer(int port){
try {
server = new ServerSocket(port);
} catch (IOException e) {
System.out.println("服务端错误:" + e.getMessage());
}
conversations = new Vector<Conversation>();
}
public void run(){
try {
while(true){
Conversation conversation = new Conversation(conversations.size()+1);
System.out.println("等待客户端连接");
Socket socket1 = server.accept();
conversation.client1 = conversation.new Client("黑方", socket1);
System.out.println("客户端1已连接");
Socket socket2 = server.accept();
conversation.client2 = conversation.new Client("白方", socket2);
System.out.println("客户端2已连接");
conversations.add(conversation);
System.out.println(conversations.size() + "组游戏已开始");
}
} catch (IOException e) {
System.out.println("连接错误:" + e.getMessage());
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
MultiObjectServer mos = new MultiObjectServer(2000);
mos.start();
}
}
class Conversation{
int id;
Client client1;
Client client2;
public Conversation(int id){
this.id = id;
}
class Client extends Thread{
String name;
Socket socket;
ObjectInputStream reader;
ObjectOutputStream writer;
boolean isConnect;
public Client(String name, Socket socket){
this.name = name;
this.socket = socket;
if(socket.isConnected())
isConnect = true;
this.start();
}
public void run(){
System.out.println("服务器端第"+id+"组对话"+name+"客户端已建立连接");
try {
writer = new ObjectOutputStream(socket.getOutputStream());//先
reader = new ObjectInputStream(socket.getInputStream());//后
System.out.println("服务器端第"+id+"组对话"+name+"客户端已建立数据流连接");
} catch (IOException e1) {
e1.printStackTrace();
return;
}
send(GameMessage.startGame, "开始对话");
while(isConnect){
try {
GameMessage message = (GameMessage)reader.readObject();
System.out.println("收到消息" + message.GetTitle());
if(message.GetTitle().equals(GameMessage.startGame)){//开始游戏的信号
}
else if(message.GetTitle().equals(GameMessage.endGame)){//结束游戏的信号
isConnect = false;
}
else if(message.GetTitle().equals(GameMessage.setSide)){//设置黑白方信息
}
else if(message.GetTitle().equals(GameMessage.blackGo)){//黑棋落子的信号
}
else if(message.GetTitle().equals(GameMessage.whiteGo)){//白棋落子的信号
}
else if(message.GetTitle().equals(GameMessage.blackWin)){//黑棋获胜的信号
}
else if(message.GetTitle().equals(GameMessage.whiteWin)){//白棋获胜的信号
}
else if(message.GetTitle().equals(GameMessage.exitGame)){//中断游戏的信号
isConnect = false;
}
else if(message.GetTitle().equals(GameMessage.message)){//发送信息的信号
SendMessage(GameMessage.message, message.GetData());
}
else{}
} catch (IOException e) {
System.out.println("服务器端第"+id+"组对话"+name+"客户端接收信息失败");
isConnect = false;
} catch (ClassNotFoundException e) {
System.out.println("服务器端第"+id+"组对话"+name+"客户端接收的信息类型错误");
isConnect = false;
}
}
}
//向单方发送信息
boolean send(String msg, Object data){
GameMessage message = new GameMessage(msg, data);
try {
writer.writeObject(message);
isConnect = true;
} catch (IOException e) {
System.out.println("服务器端第"+id+"组对话"+name+"客户端对话发送信息失败");
isConnect = false;
}
return isConnect;
}
}
//向双方发送信息
boolean SendMessage(String msg, Object data){
GameMessage message = new GameMessage(msg, data);
try {
client1.writer.writeObject(message);
client1.isConnect = true;
} catch (Exception e) {
System.out.println("服务器端第"+id+"组对话向"+client1.name+"客户端发送信息失败");
System.out.println("原因:" + e.getMessage());
client1.isConnect = false;
}
try {
client2.writer.writeObject(message);
client2.isConnect = true;
} catch (Exception e) {
System.out.println("服务器端第"+id+"组对话向"+client2.name+"客户端发送信息失败");
System.out.println("原因:" + e.getMessage());
client2.isConnect = false;
}
return client1.isConnect && client2.isConnect;
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
java的控制台聊天
共28个文件
class:16个
java:12个
需积分: 9 7 下载量 158 浏览量
2008-08-26
22:12:38
上传
评论
收藏 32KB RAR 举报
温馨提示
利用java开发的飞鸽传书的部分要点方法
资源推荐
资源详情
资源评论
收起资源包目录
chapter21_net.rar (28个子文件)
chapter21_net
ObjectClient.java 2KB
SimpleClient.class 3KB
MultiObjectClient$2.class 2KB
SimpleServer.java 2KB
Conversation.class 2KB
GameMessage.class 1KB
MultiObjectClient.java 3KB
InetAddressClass.class 1KB
MultiObjectServer.java 5KB
MultiObjectClient$1.class 1KB
ObjectClient.class 3KB
GameMessage.java 923B
chat
ChatServer.class 3KB
ChatClient.class 3KB
ChatServer.java 2KB
ChatClient.java 2KB
ObjectServer.java 2KB
SimpleClient.java 1KB
MultiObjectServer.class 2KB
file
FileClient.java 2KB
FileClient.class 2KB
FileServer.java 2KB
FileServer.class 3KB
InetAddressClass.java 597B
Conversation$Client.class 3KB
MultiObjectClient.class 2KB
SimpleServer.class 3KB
ObjectServer.class 3KB
共 28 条
- 1
资源评论
lx1215
- 粉丝: 1
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功