import java.io.InputStream; |
import java.io.OutputStream; |
import java.net.*; |
|
public class ChatServer { |
|
public void setUpServer( int port) { |
try { |
ServerSocket server = new ServerSocket(port); |
System.out.println( "服务器创建成功" + port); |
// 让服务器进入等待状态:阻塞状态 |
// 当有客户端连接上时,等待方法就会返回,返回一个代表与客户端连接的对象 |
while ( true ) { |
Socket client = server.accept(); |
System.out.println( "正在有客户端访问" + client.getRemoteSocketAddress()); |
// 调用处理连接对象的方法去处理连接对象 |
processChat(client); |
// 从连接对象上得到输入输出流对象 |
// OutputStream out=client.getOutputStream(); |
// InputStream ins=client.getInputStream(); |
// |
// String s="你好,欢迎来到javake\r\n"; |
// |
// byte[] data=s.getBytes();//获取这个字符串的字节 |
// out.write(data);//用输出对象发送数据 |
// out.flush();//强制输出 |
// int in=0; |
// while(in!=13) |
// { |
// in=ins.read(); |
// System.out.println("读到的一个是"+in); |
// } |
// System.out.println("客户端按了回车,退出"); |
// |
// client.close();//关闭与客户端的连接 |
} |
} catch (Exception e) { |
e.printStackTrace(); |
} |
} |
|
/** |
* 处理连接对象,读取客户端发来的字符串,回送给客户端 |
* |
* |
*/ |
|
private void processChat(Socket client) throws Exception { |
// 从连接对象上得到输入输出流对象 |
OutputStream out = client.getOutputStream(); |
InputStream ins = client.getInputStream(); |
|
String s = "你好,欢迎来到服务器javake\r\n" ; |
|
byte [] data = s.getBytes(); // 获取这个字符串的字节 |
out.write(data); // 用输出对象发送数据 |
out.flush(); // 强制输出 |
// 调用读取字符串的方法,从输入流中读取一个字符串 |
String inputS = readString(ins); |
int in = 0 ; |
while (!inputS.equals( "bye" )) { |
System.out.println( " 客户端说" + inputS); |
s = "服务器收到" + inputS + "\r\n" ; |
data = s.getBytes(); // 取得组成这个字符串的字节数组 |
out.write(data); |
out.flush(); |
|
inputS = readString(ins); // 读取客户端的下一次输入 |
} |
s = "你好,欢迎再来 \r\n" ; |
data = s.getBytes(); |
out.write(data); |
out.flush(); |
|
client.close(); // 关闭与客户端的连接 |
} |
|
/** |
* |
* 从输入流对象中读取字节,拼成一个字符串返回 如果读到一个字符值为13,则认为以前的是一个字符串 ins:输入 流对象 |
* return:从流上(客户端发来的)读到字符串 |
*/ |
private String readString(InputStream ins) throws Exception { |
// 创建一个字符串缓冲区 |
StringBuffer stb = new StringBuffer(); |
char c = 0 ; |
while (c != 13 ) { |
int i = ins.read(); // 读取客户端发来的一个字节 |
c = ( char ) i; // 将输入的字节转换为一个Char |
stb.append(c); // 将读取到的一个字符加到字符串缓冲区中 |
|
} |
// 将读到的字节数组转换为字符串,并调用trim去掉尾部的空格 |
String inputS = stb.toString().trim(); |
return inputS; |
} |
|
public static void main(String[] args) { |
ChatServer cs = new ChatServer(); |
cs.setUpServer( 1234 ); |
|
} |
} |