线程-使用Java socket让客户端与服务器建立连接后,服务器如何判断来自客户端的各类请求

问题描述

使用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("服务器已经接受你的连接
");

       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呢。

解决方案

这就是通信双方事先约定好通信规则,也就是所谓的协议的作用了。
各种通信业务,都是先定义好通信协议,然后才是通信操作处理了。

解决方案二:

自己定义相关的字段,服务器根据协议判断。

解决方案三:

Android客户端与java服务器端的Socket连接
JAVA中Socket服务器/客户端的通信
网络编程(1)--利用socket进行客户端与服务器端的通信

时间: 2024-09-13 08:54:44

线程-使用Java socket让客户端与服务器建立连接后,服务器如何判断来自客户端的各类请求的相关文章

基于Java Socket的自定义协议,实现Android与服务器的长连接(一)

一.基础知识准备 在正式给大家介绍自定义协议之前,我们先对网络传输和协议解析的相关知识点做一个基本的介绍,尽管这些知识点我们在学校里学过,但难免会有所遗忘,这里先做一个简单的介绍,以便对后文的内容理解更加顺畅. 1. 网络七层协议 OSI的7层从上到下分别是:7 应用层. 6 表示层. 5 会话层. 4 传输层. 3 网络层. 2 数据链路层. 1 物理层;其中高层(即7.6.5.4层)定义了应用程序的功能,下面3层(即3.2.1层)主要面向通过网络的端到端的数据流.应用层常见的协议有:HTTP

线程-socket通信中,socket建立连接后能进行长时间的反复读写操作吗?

问题描述 socket通信中,socket建立连接后能进行长时间的反复读写操作吗? 服务端和客户端以socket建立连接进行通信,我想以单线程实现多文件传输,循环发送多个文件,只是对输入输出流进行打开和关闭,为什么第一个文件传完后进行第二个文件传输时会抛异常:Socket is closed?求高手指点迷津,难道一定要关闭socket然后重新连接吗? 解决方案 不需要,肯定是你代码写得有问题.不妨把代码贴出来看看 解决方案二: 通过Socket连接一次传输多个文件 解决方案三: 上代码看看,估计

tpinit报错,没有安装tuxedo的机器上客户端程序如何去连接tuxedo服务器呢???

问题描述 在已经安装了tuxedo8.1的机器上运行客户端程序,完全正确,vc编写的客户端程序直接去连接tuxedo服务器,可在没有安装tuxedo的机器上客户端程序tpinit就要报错,tperrorno=8.我已经拷贝了libwsc.dll,wtuxws32.dll等DLL.分数有限,会贡献出来所有积分,望高手不吝赐教! 解决方案 本帖最后由 hobaobao 于 2012-01-29 15:52:32 编辑解决方案二:怎么没人回复啊?解决方案三:各位大哥,应该有人遇到过这种情况啊,怎么都没

用户如何与Oracle数据库服务器建立连接

用户要想使用Oracle数据库,首先要与数据库建立连接.针对数据库连接,Oracle提供了两种解决方式:专用连接和共享连接. 大部分情况下,我们使用专用连接方式.对专用连接来说,用户在客户端启动了一个应用程序,比如SQL*Plus,于是就在客户端本地启 动了一个用户进程.与Oracle服务器成功建立连接以后,就会在数据库服务器端生成一个对应的服务器进程,该服务器进程作为用户进程 的代理 进程,也叫影子进程,从而代替客户端去执行各种命令并将结果返回.也就是说,用户在客户端输入的各种命令,都是通过位

sqlserver2008r2-已成功与服务器建立连接,但是在登录前的握手期间发生错误。

问题描述 已成功与服务器建立连接,但是在登录前的握手期间发生错误. 前几天装的sqlServer数据库,一直没用,今天用的时候的时候登陆不上,错误提示如下: 已成功与服务器建立连接,但是在登录前的握手期间发生错误. (provider: SSL 提供程序, error: 0 - 无法解密指定的数据. ) (.Net SqlClient Data Provider) 解决方案 服务器和客户端安装了证书吗?

SQL Server成功与服务器建立连接但是在登录过程中发生错误的快速解决方案_MsSql

最近在VS2013上连接远程数据库时,突然连接不上,在跑MSTest下跑的时候,QTAgent32 crash.换成IIS下运行的时候,IIS crash.之前的连接是没问题的,后网上找了资料,根据牛人所说的方案解决了. 1. Exception message 已成功与服务器建立连接,但是在登录过程中发生错误. (provider: SSL Provider, error: 0 - 接收到的消息异常,或格式不正确.) ---> System.ComponentModel.Win32Except

对Outlook 2010进行自动答复设置时提示无法与服务器建立连接

最近在对Outlook 2010进行自动答复设置时,提示无法与服务器建立连接,当时感觉非常地奇怪,白天还好好地,回家邮件收发也正常,登录OWA查看可以正常收发邮件正常,配置外出提醒也是正常的,检查Exchange Server 服务器日志也是正常的,这是为什么呢? 于是开始尝试删除outlook 2010配置文件,想看看是否是由于配置文件导致的. 删除配置文件后,重新配置,新的问题又出现了,提示找不到Exchange Server 服务器,如下图提示: 尝试手动重新输入Exchange Serv

已成功与服务器建立连接但是在登录过程中发生错误的解决

  已成功与服务器建立连接,但是在登录过程中发生错误的解决方案 数据库一打开就提示 已成功与服务器建立连接,但是在登录过程中发生错误的解决方案 (provider: 共享内存提供程序, error: 0 - 管道的另一端上无任何进程.) 解决办法: 1.应该是服务器上没有开启管道支持,看到网上有人有同样问题,远程桌面进SQL Server服务器上试一下: 打开'程序'-'所有程序'-'Microsoft SQL Server 2005 '-'配置工具'-'SQL Server 配置管理器',在弹

后台-我用jsp做的网站,有时候点的某个连接后,服务器一直加载不出来,刷新后加载也不行,只有重启服务

问题描述 我用jsp做的网站,有时候点的某个连接后,服务器一直加载不出来,刷新后加载也不行,只有重启服务 前台使用的别人的框架 J-UI .后台是Hibernate-struts2-spring,有的时候点了某个链接之后就一直加载,没有反应,访问其他的页面还能进去,如果再回来访问这个页面也进不去,刷新也不行,只能重启服务器,照这么下去这网站属于废货了,根本没法用.帮帮忙吧各位.... 解决方案 有没有可能是内存溢出的问题