小豆子0722
2015-10-14 13:58使用Java socket让客户端与服务器建立连接后,服务器如何判断来自客户端的各类请求
初学java,目前写了一个服务端和一个客户端。大致了解了如何socket通信是如何操作的,并且初步实现了客户端和服务端的通信。也仅仅是是接受和返回简单的字符串。部分代码如下
public void run(){
try{
serverSocket=new ServerSocket(SERVER_PORT_ONE);
System.out.println("serversocket已创建");
while(true){
clientSocket=serverSocket.accept();
System.out.println("监测到了socket");
receiveThread=new SocketThread(clientSocket); //开启新线程处理请求
receiveThread.start();
}
}catch(IOException e){
System.out.println(e.getMessage());
}
}
这是socket监听的代码。当服务器监听到了socket之后,开启一个新线程去处理。
socketthread类的run()方法来接受数据
public void run(){
String Command=null;
String str=null;
output.println("服务器已经接受你的连接\n");
while(true){
try{
str=null;
str=input.readLine();
System.out.println("监测数据如下:"+str);
}catch(IOException e){
System.out.println(e.getMessage());
}
Command=str.trim().toUpperCase();
if(str==null || Command.equals("QUIT")) {
break;
}
}
try{
clientSocket.close();//关闭套接字
System.out.println("clientSocket已经断开连接");
}catch(IOException e){
System.out.println(e.getMessage());
}
Command=null;
}
在while循环里面,服务端会不断读取来自客户端的内容,然后输出来。如果读到quit,就表示断开连接,并关闭socket。
现在的问题就是, 如果我的客户端的请求十分多样,比如发送语音,视频,图片或者数据给服务器进行处理,我的服务端必须做出相应的处理,请问如何做到这点啊。
我自己想的思路是客户端发送数据前先要发送一个header标签,表示想干什么。然后读取到了之后客户端再判断,然后分给不同的函数去处理。不知道这样好不好,如下所示。
while(true){
try{
str=null;
str=input.readLine();
if(str.equals("图片")){
图片相关函数(socket );
}
if(str.equals("视频")){
视频处理相关函数(socket );
}
if(str.equals("数据")){
数据处理相关函数(socket );//如各种算法
}
System.out.println("监测数据如下:"+str);
}catch(IOException e){
System.out.println(e.getMessage());
}
Command=str.trim().toUpperCase();
if(str==null || Command.equals("QUIT")) {
break;
}
不知道是否可行。
第二个问题,我的服务器要主动推送数据给客户端该如何实现,肯定不能写在这个线程里面。写在其他地方我的类和函数如何得到这个线程里的socket呢。
- 点赞
- 回答
- 收藏
- 复制链接分享
3条回答
为你推荐
- 重金求解,为什么我接收不到socket服务端返回的信息,代码如下,这个logger.debug("result:"result)为什么总是空,确认了服务端的确返回到了socket,怎样才能正确从socket取到值呢?
- java
- 1个回答
- java 获取服务器数据,报SocketException connection reset 异常 怎么解决异常,让程序继续执行。。
- java
- 缓存
- 负载均衡
- 机器学习
- 1个回答
- Java TCP文件服务器,下载到的文件和原文件大小不一致
- tcp
- socket
- java
- 0个回答
- socket双向通信,为什么服务器只能接收一次客户端发送的消息
- 阻塞
- 双向通信
- socket通信
- 0个回答
- java nio 业务接收多线程处理是否必要
- nio
- 0个回答
换一换