本篇以Socket聊天为例,实现从服务端到客户端的聊天功能
1.服务器端任务如下:
1.ChatServer类负责开启Server端服务
2.ReceiveMsg负责接收消息
3.SendMsg负责发送消息
4.Server端响应请求,向Client端返回数据
2.实现步骤如下:
1.首先创建一个java项目,名字就叫做ChatServerDemo
2.创建项目包名全部小写的server
3.创建ChatServer类
4.开始写代码
package chatserver;
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 org.omg.CORBA.CTX_RESTRICT_SCOPE;
//Socket聊天服务器端
//继承Thread类创建一个线程
public class ChatServerTest extends Thread {
//定义一个ServerSocket对象
private ServerSocket server = null;
//定义一个端口号
private static final int PORT=5000;
//定义写的buffer
private BufferedWriter writer;
//定义读的buffer
private BufferedReader reader;
private ChatServerTest() throws IOException{
//创建Socket服务器
CreateSocket();
}
//重写Run方法
@Override
public void run() {
//定义服务客户端的Socket
Socket client;
//定义接收的文本
String text;
try{
//始终在监听
while(true){
//开启线程,实时监听socket端口
//获取应答消息
client=ResponseSocket();
//响应客户端连接请求
while(true){
//接收客户端消息
text=ReceiverMsg(client);
System.out.println("客户端消息:"+text);
//连接获得客户端发来的消息并将其显示在屏幕上
SendMsg(client,text);
//向客户端返回消息
if(true)break;
//中断继续等待连接请求
}
//关闭此次连接
CloseSocket(client);
}
}catch(Exception e){
e.printStackTrace();
System.out.println(e);
}
}
private void CloseSocket(Socket socket) throws IOException{
reader.close();
writer.close();
socket.close();
}
//封装发送消息的方法
private void SendMsg(Socket socket,String Msg) throws IOException{
//要发送的消息写入BufferedWrite中
writer=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
//添加空行分隔符
writer.write(Msg+"\n");
//刷新发送
writer.flush();
}
//接收消息的方法
private String ReceiverMsg(Socket client) throws Exception {
//保存到读的方法
reader=new BufferedReader(
//将接收到的消息保存到缓冲区
new InputStreamReader(
//获取接收到的消息
client.getInputStream()));
//接收到的消息保存到字符串中
String text="Server Send:"+reader.readLine();
//以字符串的形式接收返回的信息
return text;
}
//接收消息
private Socket ResponseSocket() throws IOException{
Socket client=server.accept();
return client;
}
//实例化ServerSocket
private void CreateSocket() throws IOException{
server=new ServerSocket(PORT,100);
}
/**这段代码写的好纠结啊,几个月没写过java代码,竟然把程序执行需要main方法给忘了*/
/**运行main方法发现报错BindException,查找资料发现是由于端口号被其他程序占用了,
解决方法是在任务管理器里结束掉占用端口号的进程,具体怎么结束呢,我的办法是先在控制台输入
netstat -ano 查看端口号和相应的PID 然后去任务管理器-查看-选择列 勾选上PID,找到PID,然后结束相应的进程*
再次运行程序发现程序运行成功了*/
//启动服务器代码
public static void main(String[] args) throws Exception{
ChatServerTest cTest=new ChatServerTest();
if(cTest != null){
System.out.println("===========================CTEST.Start=====================");
cTest.start();
}
}
}
到此一个简单的服务器就搭建好了