server-求 如何在Socket长连接中传参数

问题描述

求 如何在Socket长连接中传参数

package cn.qmhd.socket;

import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.Reader;
import java.io.Writer;
import java.net.ServerSocket;
import java.net.Socket;
import java.nio.CharBuffer;

/**

  • Socket长连接 服务端
    */
    public class SocketServer {

    private ServerSocket serverSocket;
    private Socket socket;
    private int port = 5055;

    private void start() throws Exception {
    serverSocket = new ServerSocket(port);
    while (true) {
    socket = serverSocket.accept();
    new Thread(new SocketThread(socket)).start();// 多线程阻塞
    }
    }

    /**

    • 处理socket连接s
      */
      class SocketThread implements Runnable {
      private Socket socket;
      private String temp = "";

      public SocketThread(Socket socket) {
      this.socket = socket;
      }

      @SuppressWarnings("unused")
      public void run() {
      try {
      Reader reader = new InputStreamReader(socket.getInputStream());
      Writer writer = new OutputStreamWriter(socket.getOutputStream());
      CharBuffer charBuffer = CharBuffer.allocate(1024);
      int readIndex = -1;
      while ((readIndex = reader.read(charBuffer)) != -1) {
      charBuffer.flip();
      temp = charBuffer.toString();
      System.out.println("server-->" + temp);
      writer.write("this is server");
      writer.flush();

          }
      } catch (IOException e) {
          e.printStackTrace();
      } finally {
          if (socket != null) {
              if (!socket.isClosed()) {
                  try {
                      socket.close();
                  } catch (IOException e) {
                      e.printStackTrace();
                  }
              }
          }
      
      }
      

      }

    }

    public static void main(String[] args) {
    SocketServer s = new SocketServer();
    try {
    s.start();
    } catch (Exception e) {
    e.printStackTrace();
    }
    }

}

package cn.qmhd.socket;

import java.net.Socket;
import java.net.UnknownHostException;
import java.io.*;
import java.nio.CharBuffer;

public class SocketClient {
private String host = "127.0.0.1";
private int port = 5055;
private String strs = "aaaa";
private static PrintWriter pw = null;
private Socket socket = null;

public PrintWriter getInstance(){
    if(pw==null){
        try {
            System.out.println("pw=null");
            // 创建Socket
            socket = new Socket(host, port);
            pw = new PrintWriter(new OutputStreamWriter(
                    socket.getOutputStream()));

        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    System.out.println("pw!=null"+pw);
    return pw;
}

public PrintWriter getPw() {
    return pw;
}

public void setPw(PrintWriter pw) {
    this.pw = pw;
}

/**
 * 数据发送线程
 */

public static void send(SocketClient sc,String thisstrs){
    sc.getInstance();
    System.out.println(pw);
    pw.write(thisstrs);
}

class SendThread implements Runnable {

    public void run() {
        while (true) {
            try {
                pw.write(strs);
                pw.flush();
                Thread.sleep(2000);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

}

class ReceiveThread implements Runnable {
    private Socket socket;

    public ReceiveThread(Socket socket) {
        this.socket = socket;
    }

    public void run() {
        while (true) {
            try {
                Reader reader = new InputStreamReader(
                        socket.getInputStream());
                CharBuffer charBuffer = CharBuffer.allocate(8192);
                @SuppressWarnings("unused")
                int charIndex = -1;
                while ((charIndex = reader.read(charBuffer)) != -1) {
                    charBuffer.flip();
                    System.out.println("client--> " + charBuffer.toString());
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

private void start() {
    new Thread(new SendThread()).start();// 启动读线程

// send("abcdefg");
new Thread(new ReceiveThread(socket)).start();// 启动收线程

}

public static void main(String[] args) {
    SocketClient sc = new SocketClient();
    sc.getInstance();
    sc.start();
    sc.send(sc,"--------------------------------");

// sc.send("abcdefg");
}

}

package cn.qmhd.socket;

import java.io.PrintWriter;

public class Test {

public static void main(String[] args) {
    System.out.println("asdfgfhgj");
    SocketClient sc = new SocketClient();
    sc.send(sc,"--------------------------------");

// PrintWriter pw = sc.getInstance();
// System.out.println("Test:"+sc.getInstance());

}

}

时间: 2024-11-08 18:59:43

server-求 如何在Socket长连接中传参数的相关文章

java socket长连接中解决read阻塞的3个办法_java

解决的方法有3个 : 1 约定发送的数据长度,比如 http的 keepAlive 就是必须依赖这个的 Content-Length 2 设置超时的时间,根据我的经验,只有在Socket级别设置才有效. 复制代码 代码如下: Socket socket = new Socket(host,port); socket.setSoTimeout(100); // 如果超过100毫秒还没有数据,则抛出 SocketTimeoutException 3 让发送端发送完数据后,关闭连接. 这个在Http的

Socket长连接问题

问题描述 要开发一个Socket接口,以前没接触过Socket,百度了一下看的好乱,我这边是客户端,要求用长连接机制来实现,请问各位大神,如何来实现,最好能有例子参考,场景如下:对方IP:10.1.198.47端口:18899请求示例如下:QryBossLog{020006}{13900000097}{20130701000000}{20130731000000}{200}如何通过Socket长连接方式来得到对方的返回字符串,谢谢 解决方案 解决方案二:看看这个:解决方案三:我刚开始学习的时候也

iOS后台如何保持socket长连接和数据传输

iOS后台如何保持socket长连接和数据传输 工程中使用tcp长连接来和服务端进行数据传输,在IOS平台上,由于苹果的后台机制,会有以下问题: 当程序退到后台的时候,所有线程被挂起,系统会回收所有的socket资源,那么socket连接就会被关闭,因此无法再进行数据的传输: 解决方法: 通过设置以下属性可以保持socket连接和数据的继续传输 1.需要在Info.plist文件中添加UIBackgroundModes中的VOIP键值: 2.设置流属性 CFReadStreamRef和CFWri

利用socket长连接做信息报警提示

问题描述 利用socket长连接做信息报警提示 现在在做一个项目,需要用服务器推送技术做一个报警提示,就是只要有没有处理的信息显示,就自动报警

socket #-C#SOCKET长连接小数据程序未响应

问题描述 C#SOCKET长连接小数据程序未响应 最近由于业务的需要,Linux系统嵌入式设备往我做的服务程序发送数据. 速度奇慢,而且还是程序无响应.后来自己用C#写了一个客户端用来测试.已经用了线程池,不知道用法对不对.请大家帮忙看下. 服务端: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.N

socket长连接 1秒50帧数据 xml格式传输 丢帧

问题描述 大概万分之五左右的丢帧,求解 解决方案 解决方案二:用的UDP吧 丢点正常

如何在2个文本中传递参数?

问题描述 我做了三个文本文件,第一个是登录功能,第二个是Atm的菜单界面,第三个是各个功能的具体界面.三个文件时相关联的.但是在实现第三个文件的功能时出了问题.例如取款功能,我输入要取款的金额,然后程序要判断该账户金额是否充足.但是我应该如何设计,才能将第一个文本中输入的账户号码引用到第三个文本文件中配合查询语句使用? 解决方案 解决方案二:求高手赐教解决方案三:结贴率和分数都比较高啊.:)

javascript 向strust2中传参数发生了异常

问题描述 <c:iftest="${!emptyorganizations}"><c:forEachitems="${organizations}"var="org"><trbgcolor="#EFF3F7"class="TableBody1"onmouseover="this.bgColor='#DEE7FF';"onmouseout="this

关于Socket建立长连接遇到的bug信息

下面是本人在Socket连接的开发中遇到的bug总结 1."远程服务器关闭了Socket长连接'的错误信息 2.关于"kCFStreamNetworkServiceTypeVoIP" is deprecated in iOS9 AsyncSocket与SocketRocket用来做后台获取数据的时候报如下警告: kCFStreamNetworkServiceTypeVoIP - this service type is deprecated in favor of using