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();
    		}
    	}
    }
    
  • 相关阅读:
    Java沉思录之重识String
    【python】 爬虫-爬取新闻
    【大数据】水质分析————(数据预处理)对水质图片的处理
    神经网络 鸢尾花数集预测
    【python 基础】词云
    【数据结构】字符串匹配
    【算法】 分治
    【数据结构】队列
    【数据结构】栈 的 顺序表示
    【数据结构】 线性表 的 链式存储结构
  • 原文地址:https://www.cnblogs.com/fangying7/p/4676484.html
Copyright © 2011-2022 走看看