服务器的工作是接收并读取客户端发来的消息,以及对相关信息的处理(如对用户名,密码等的处理),再返还给客户端
对于简单的服务器端的实现,我觉得有两个重要的地方,一是创建ServerSocket对象,将指定的端口打开:
//建立绑定在指定端口上的服务器对象
ServerSocket server = new ServerSocket(port);
二是对连接对象发送来的消息的读取。
附上一个简单服务器的实现的代码:
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class MainUI {
//创建简单服务器
public void createUI(int port){
try {
//建立绑定在指定端口上的服务器对象
ServerSocket server = new ServerSocket(port);
System.out.println("服务器创建成功!"+port);
while(true){//进入循环状态
//让服务器进入等待状态
Socket client = server.accept();
Process(client);
}
} catch (IOException e) {
e.printStackTrace();
}
}
//处理连接对象
private void Process(Socket client) throws IOException {
//从连接对象上得到输入输出流对象
OutputStream out = client.getOutputStream();
InputStream ins = client.getInputStream();
String ss = "欢迎进入聊天室";
//取得组成这个字符串的字节
byte[] data = ss.getBytes();
//用输出对象发送
out.write(data);
//强制输出
out.flush();
//调用读取字符串的方法
String inputs = readString(ins);
while(!inputs.equals("bye")){
System.out.println("客户机说:"+inputs);
ss = "服务器收到:"+inputs+"\r\n";
//取得组成字符串的字节
data = ss.getBytes();
//用输出对象发送
out.write(data);
//强制输出
out.flush();
//读取下一个
inputs = readString(ins);
}
out.write(data);
//强制输出
out.flush();
//关闭与客户机的连接
out.close();
}
//从输入流对象中读取字节,拼成一个字符串返回
private String readString(InputStream ins) throws IOException {
//创建一个字符缓冲对象
StringBuffer stb = new StringBuffer();
char c = 0;
while(c!=13){
//读取发送来的信息
int i = ins.read();
//强制类型转换
c = (char)i;
//将数据读入缓冲区
stb.append(c);
}
//将得到的字节转化为字符
String inputs = stb.toString().trim();
return inputs;
}
//主函数
public static void main(String[] args) {
MainUI mu = new MainUI();
mu.createUI(9080);
}
}
对于简单的服务器端的实现,我觉得有两个重要的地方,一是创建ServerSocket对象,将指定的端口打开:
//建立绑定在指定端口上的服务器对象
ServerSocket server = new ServerSocket(port);
二是对连接对象发送来的消息的读取。
附上一个简单服务器的实现的代码:
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class MainUI {
//创建简单服务器
public void createUI(int port){
try {
//建立绑定在指定端口上的服务器对象
ServerSocket server = new ServerSocket(port);
System.out.println("服务器创建成功!"+port);
while(true){//进入循环状态
//让服务器进入等待状态
Socket client = server.accept();
Process(client);
}
} catch (IOException e) {
e.printStackTrace();
}
}
//处理连接对象
private void Process(Socket client) throws IOException {
//从连接对象上得到输入输出流对象
OutputStream out = client.getOutputStream();
InputStream ins = client.getInputStream();
String ss = "欢迎进入聊天室";
//取得组成这个字符串的字节
byte[] data = ss.getBytes();
//用输出对象发送
out.write(data);
//强制输出
out.flush();
//调用读取字符串的方法
String inputs = readString(ins);
while(!inputs.equals("bye")){
System.out.println("客户机说:"+inputs);
ss = "服务器收到:"+inputs+"\r\n";
//取得组成字符串的字节
data = ss.getBytes();
//用输出对象发送
out.write(data);
//强制输出
out.flush();
//读取下一个
inputs = readString(ins);
}
out.write(data);
//强制输出
out.flush();
//关闭与客户机的连接
out.close();
}
//从输入流对象中读取字节,拼成一个字符串返回
private String readString(InputStream ins) throws IOException {
//创建一个字符缓冲对象
StringBuffer stb = new StringBuffer();
char c = 0;
while(c!=13){
//读取发送来的信息
int i = ins.read();
//强制类型转换
c = (char)i;
//将数据读入缓冲区
stb.append(c);
}
//将得到的字节转化为字符
String inputs = stb.toString().trim();
return inputs;
}
//主函数
public static void main(String[] args) {
MainUI mu = new MainUI();
mu.createUI(9080);
}
}