基于TCP的JAVA通讯

  服务端做的是多线程的,支持多个客户端同时访问。

1.客户端

package com.zhao.tcp;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.Socket;
import java.net.UnknownHostException;

public class Demo2_Client {
    /***
     * 1.客户端
     * 创建Socket连接服务器(指定ip地址,端口号)通过ip地址找对应的服务器
     * 调用Socket的getInputStream()和getoutputStream()方法获取服务连接的IO流
     * 输入流可以读取服务器输出流写出的数据
     * 输出流可以写出数据写到服务器的输入流
     */

    public Demo2_Client() {
        // TODO 自动生成的构造函数存根
    }

    public static void main(String[] args) throws Exception, IOException {
        Socket socket=new Socket("127.0.0.1", 9876);
        BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream())); //将字节流转换为字符流
        PrintStream ps=new PrintStream(socket.getOutputStream()); //PrintStream 里面有写出换行的方法
         System.out.println( br.readLine());  //readLine()是以\r\n为结束标志的
         ps.println("连接!");
         System.out.println( br.readLine());
        socket.close();
        
    }

    

}

2.服务端

package com.zhao.tcp;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;

public class Demo2_Server {
    /**
     * 2.服务端
     * 创建ServerSocket(需要指定端口号)
     * 调用ServerSocket的accept()方法接收一个客户端请求,得到一个SOcket
     * 调用socketgetInputStream()和getoutputStream()方法获取客户端连接的IO流
     * 输入流可以读取客户端输出流写出的数据
     * 输出流可以写出数据写到客户端的输入流
     */
    public Demo2_Server() {
        // TODO 自动生成的构造函数存根
    }

    public static void main(String[] args) throws IOException {
        //demo(); 
        
        ServerSocket server=new ServerSocket(9876);
        while(true){
            final Socket socket=server.accept(); //接受客户端的请求
            //每连接一个客户端就创建一个线程
            new Thread(){
                public void run() {
                
                    try {
                        BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream())); //将字节流转换为字符流
                        PrintStream ps=new PrintStream(socket.getOutputStream()); //PrintStream 里面有写出换行的方法
                        ps.println("欢迎访问服务器!");
                         System.out.println( br.readLine());
                         ps.println("ok");
                        socket.close();
                    } catch (IOException e) {
                        // TODO 自动生成的 catch 块
                        e.printStackTrace();
                    }
                    
                };
            }.start();
        
        }
    }

    
    
    private static void demo() throws IOException {
        ServerSocket server=new ServerSocket(9876);
        Socket socket=server.accept(); //接受客户端的请求
        BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream())); //将字节流转换为字符流
        PrintStream ps=new PrintStream(socket.getOutputStream()); //PrintStream 里面有写出换行的方法
        ps.println("欢迎访问服务器!");
         System.out.println( br.readLine());
         ps.println("ok");
        socket.close();
    }

}

3.效果图

posted @ 2019-03-16 20:24  Angry-rookie  阅读(783)  评论(0)    收藏  举报