xiao_xu1228 2013-08-06 08:56
浏览 2461

求 如何在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());

}

}

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 MATLAB怎么通过柱坐标变换画开口是圆形的旋转抛物面?
    • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
    • ¥15 解riccati方程组
    • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
    • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
    • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
    • ¥50 树莓派安卓APK系统签名
    • ¥65 汇编语言除法溢出问题
    • ¥15 Visual Studio问题
    • ¥20 求一个html代码,有偿