62,614
社区成员
发帖
与我相关
我的任务
分享
clients.add(1,out);//保存终端的连接信息
BufferedWriter send = (BufferedWriter) clients.get(1);//取得终端连接信息
send.write(str);//向终端发送信息
send.flush();
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Vector;
public class success extends Thread {
private Socket client;
static Vector<Object> clients = new Vector<Object>();//保存客户端和终端的连接信息
public success(Socket c) {
this.client = c;//创建与客户端连接的socket
}
public void run() {
try {
System.out.println(Thread.currentThread().getName() + " start");
BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
//利用BufferedReader实现数据的快速接收,getInputStream()获取socket底层数据输入流,InputStreamReader()实现字节到字符串的高校读取
BufferedWriter out =new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));
//利用BufferedWriter实现数据的快速写入,getOutputStream()获取socket底层数据输出流,OutputStreamWriter()实现字节到字符串的高校写入
String str = in.readLine();//此方法为阻塞状态,一直到收到回车(\r)换行(\n)才结束阻塞(接收信息完毕)\
while(str != null){
System.out.println("server receive: " + str);
if(str.indexOf("1")>=0){//如果是客户端发来消息,则执行指定操作
clients.add(0,out);//保存客户端的连接信息
out.write("客户端已成功连接!\r\n");//信息写入输出流
out.flush();//写回client需要flush
System.out.println("客户端连接成功! ");
str = in.readLine();//读取client返回信息,此方法为阻塞状态,一直到收到回车(\r)换行(\n)才结束阻塞(接收信息完毕)
System.out.println("server receive: " + str);
while(true){
if(str.indexOf("1.1")>=0){//如果客户端发来“打开”命令,则执行指定操作
clients.add(0,out);//保存客户端的连接信息
BufferedWriter send = (BufferedWriter) clients.get(1);//取得终端连接信息
send.write("1.1\r\n");//向终端发送信息
send.flush();
System.out.println("打开箱子");
}else if(str.indexOf("1.2")>=0){//如果客户端发来“关闭”命令,则执行指定操作
System.out.println("关闭箱子");
// BufferedWriter send = (BufferedWriter) clients.get(1);//取得终端连接信息
// send.write("1.1");
// send.flush();
}
str = in.readLine();//读取client返回信息,此方法为阻塞状态,一直到收到回车(\r)换行(\n)才结束阻塞(接收信息完毕)
}
}else if(str.indexOf("2")>=0){
if(clients.get(1)=="0")
{
clients.remove(1);
clients.remove(1);
}
clients.add(1,out);//保存客户端的连接信息
System.out.println("终端端连接成功! ");
str = in.readLine();//读取client返回信息,此方法为阻塞状态,一直到收到回车(\r)换行(\n)才结束阻塞(接收信息完毕)
System.out.println("server receive: " + str);
while(true){
if(str.indexOf("2.1")>=0){//如果客户端发来“打开”命令,则执行指定操作
System.out.println("箱门已打开!");
// BufferedWriter send = (BufferedWriter) clients.get(1);//取得终端连接信息
// send.write("2.1");
}else if(str.indexOf("2.2")>=0){//如果客户端发来“关闭”命令,则执行指定操作
System.out.println("箱子已关闭!");
// BufferedWriter send = (BufferedWriter) clients.get(1);//取得终端连接信息
// send.write("2.1");
}
str = in.readLine();//读取client返回信息,此方法为阻塞状态,一直到收到回车(\r)换行(\n)才结束阻塞(接收信息完毕)
}
}
}
System.out.println(Thread.currentThread().getName() + " end");
out.close();
} catch (IOException e) {
}
}
public static void main(String[] args) throws IOException {
clients.add(0,0);//初始化列表,否则会出错
clients.add(1,0);
ServerSocket server = new ServerSocket(1234);//监听1234端口
System.out.println("server is start!");
while (true) {
success mc = new success(server.accept());//阻塞,开始监听
if(server.getInetAddress().getHostAddress().indexOf("0.0.0.0")<0){
System.out.println("accept connect: " + server.getInetAddress().getHostAddress());
}
mc.start();//一旦有连接请求,则建立一个线程
}
}
}
BufferedWriter out =new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));
//利用BufferedWriter实现数据的快速写入,getOutputStream()获取socket底层数据输出流,OutputStreamWriter()实现字节到字符串的高校写入