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(9090);
}
}
转载于:https://my.oschina.net/u/125259/blog/310278