socket
InputStream inputStream = socket.getInputStream();
byte[] bytes = new byte[1024];
inputStream.read() //返回的是字节编码,流中第一个字符的字节编码
int i = inputStream.read(bytes);//i是返回的读到bs的字节个数
String s = new String(bytes,0,i);//new String(bytes)这样字符串里会有很多空格,空字节数组也转换成了字符串
1KB=1024B=1024byte=8192bit
1,socketClient,socketServer 一旦一方停止连接中断,任何一方把流关闭即中断
2,socket 一边输入即另一边输出,输入耗时太长(获取输入流后打断点)输出一直阻塞
3,客户端输入流没进行输入,服务端输出流会一直阻塞,在while中阻塞,outputStream.close()操作后不再阻塞
4,服务端while监听客户端有outputStream.write操作,服务端即输出,可通过约定字符串比如end再输出(只是打印,流还在未关闭状态)
长度+内容的方式传送
由于inputStream.read()只能读取一个字节最大256,所以当outputStream.write(280)i大于256时,需要两次移位写入
outputStream.write(i >> 8);
outputStream.write(i);
(inputStream.read() << 8)+inputStream.read()读取时两次移位读取
while(-1 != ( n = inputStream.read(bytes))){//bytes不足以放下
System.out.println(n);
sb.append(new String(bytes,0,n));
}
https://www.cnblogs.com/yiwangzhibujian/p/7107785.html
public static void main(String args[]) throws Exception { // 要连接的服务端IP地址和端口 String host = "127.0.0.1"; int port = 55533; // 与服务端建立连接 Socket socket = new Socket(host, port); // 建立连接后获得输出流 OutputStream outputStream = socket.getOutputStream(); String message = "hello123456789"; int i = 280; Scanner scan = new Scanner(System.in); while (true) { if (scan.hasNext()) { message = scan.next(); } outputStream.write((message).getBytes("UTF-8")); outputStream.flush(); if ("end1".equals(message)) { outputStream.close();// 关闭之前,服务端会一直阻塞(有流入即流出,没有则阻塞) } // outputStream.write(i >> 8);//当需要写入一个大于256的数字时,需要分两次移位写入,因为一次最大写入一个字节 // outputStream.write(i); } // outputStream.close(); // socket.close(); } public static void main(String[] args) throws Exception { // 监听指定的端口 int port = 55533; ServerSocket server = new ServerSocket(port); // server将一直等待连接的到来 System.out.println("server将一直等待连接的到来"); Socket socket = server.accept(); // 建立好连接后,从socket中获取输入流,并建立缓冲区进行读取 InputStream inputStream = socket.getInputStream(); byte[] bytes = new byte[277]; int len; int n; StringBuffer sb = new StringBuffer(); while (true) { // int first = inputStream.read(); // System.out.println(first); // // 如果读取的值为-1 说明到了流的末尾,Socket已经被关闭了,此时将不能再去读取 // if (first == -1) { // break; // } // int second = inputStream.read(); // System.out.println(second); // int length = (first << 8) + second; // System.out.println(length); int i = inputStream.read(bytes);//bytes足以放下 String s = ""; if(-1 != i){ s = new String(bytes,0,i); System.out.println("******"+s); } System.out.println("监听inputStream"); } // inputStream.close(); // socket.close(); // server.close(); }
public void server() throws Exception { final ServerSocket socket = new ServerSocket(55533); // 1 try { for (;;) { System.out.println("wait Accept"); final Socket clientSocket = socket.accept(); // 2 System.out.println("Accepted connection from " + clientSocket); new Thread(new Runnable() { // 3 @Override public void run() { OutputStream out; try { out = clientSocket.getOutputStream(); System.out.println("write start");// socket // 一边输入即另一边输出,输入耗时太长(打断点)输出一直阻塞 out.write("Hi!\r\n".getBytes(Charset .forName("UTF-8"))); // 4 // out.flush(); System.out.println("write over"); clientSocket.close(); // 5 } catch (IOException e) { e.printStackTrace(); try { clientSocket.close(); } catch (IOException ex) { // ignore on // close } } } }).start(); // 6 } } catch (IOException e) { e.printStackTrace(); } }
// 要连接的服务端IP地址和端口 String host = "127.0.0.1"; // 与服务端建立连接 Socket socket = new Socket(host, 55533); InputStream is = socket.getInputStream(); byte[] bs = new byte[80]; int len = is.read(bs); System.out.println(new String(bs,0,len));