zoukankan      html  css  js  c++  java
  • Java TCP 程序

    服务器采用BIO模式,每一个线程处理一个连接。问题出现在,如果使用BufferedReader去读取字符流,如果没有换行符的话,那么就会导致线程阻塞。因为调用了readLine()方法

    import java.io.*;
    import java.net.Socket;
    import java.net.InetAddress;
    import java.net.ServerSocket;
    import java.util.Scanner;
    
    class ServerSocketTest {
    	public static void main(String[] args) {
    		try {
    			ServerSocket ss = new ServerSocket(6000);
    			System.out.println("Server running, waitting for client to login ...");
    			Socket s = ss.accept();
    			
    			OutputStream os = s.getOutputStream();
    			InputStream is = s.getInputStream();
    			os.write("Hello Wellcome
    ".getBytes());
    			os.flush();
    			
    	
    			/*
    			byte[] buf = new byte[1024];
    			int len = is.read(buf);
    			System.out.println(new String(buf,0,len));*/
    			
    			BufferedReader br = new BufferedReader(new InputStreamReader(is));
    			String line = null;
    			while((line = br.readLine()) != null){
    				System.out.println(line);
    			}
    			
    			os.close();
    			is.close();
    			s.close();
    			ss.close();
    
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	}
    }
    

     客户端程序。同样会阻塞,因为调用了readLine()方法。

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.OutputStream;
    import java.io.PrintWriter;
    import java.net.InetAddress;
    import java.net.Socket;
    import java.net.UnknownHostException;
    
    public class SocketTest {
    	public static void main(String[] args){
    		try {
    			System.out.println(InetAddress.getLocalHost());
    			Socket s = new Socket(InetAddress.getLocalHost(), 6000);
    			
    			OutputStream os = s.getOutputStream();
    			PrintWriter pw = new PrintWriter(os);
    			pw.write("username:fangying;password:123
    ");
    			pw.flush();
    			
    			InputStream is = s.getInputStream();
    			BufferedReader br = new BufferedReader(new InputStreamReader(is));
    			String line = null;
    			while ((line = br.readLine()) != null) {
    				System.out.println("client get :" + line);
    			}
    
    			br.close();
    			is.close();
    			pw.close();
    			os.close();
    			s.close();
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	}
    }
    
  • 相关阅读:
    js -- 判断数组是否为空?
    vue 初始化高德地图
    git .gitignore 忽略规则的匹配语法
    vue 人脸识别 demo
    vue音乐app——VSCODE中设置vue文件模板
    vue音乐项目——解析stylus中的 &.router-link-active
    十月训练记录
    概率与期望 学习笔记
    山东省队集训整理
    APIO2020 简要题解
  • 原文地址:https://www.cnblogs.com/fangying7/p/4676484.html
Copyright © 2011-2022 走看看