JAVA网络编程写TCP多线程聊天室

package 网络编程.TCP数据;

import jdk.nashorn.internal.runtime.Scope;

import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class TCP接收端 {
    /*
        A.创建接收端的sock对象
        B.监听客户端,返回一个对应的Socket对象
        C.获取输入流显示数据到控制台
        D.释放资源
     */
    public static void main(String[] args) throws IOException {
        //创建接收端的sock对象
        ServerSocket ss =new ServerSocket(8888);
        //监听客户端返回一个对应的sock对象
        Socket s =ss.accept();//侦听接受到此方法的套接字,在此方法链接时一直堵塞
        //获取输入流数据返回控制台
        InputStream is =s.getInputStream();
        byte[] bys= new byte[1024];
        int len =is.read(bys);
        String str =new String(bys,0,len);
        System.out.println(str);
        System.out.println(str);
        ss.close();
        s.close();
    }
}

package 网络编程.TCP数据;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
/*
    TCP协议发送数据
    A:创建发送端的Socke对象
        这一步如果成功表示链接建立成功
    B:获取输出流,写数据
    C:释放资源

 */
public class TCP发送 {
    public static void main(String[] args) throws IOException {
        //创建发送端对象
        Socket sc= new Socket("127.0.0.1",8888);
        //获取输出流写数据
        OutputStream os =sc.getOutputStream();
        os.write("hallotcp".getBytes());
        //释放资源
        sc.close();


    }
}

添加一个信息反馈也就是链接成功后的返回信息

 public static void main(String[] args) throws IOException {
        //创建服务器Socket对象
        ServerSocket s =new ServerSocket(8888);
        //监听客户端链接
        Socket sc = s.accept();
        //获取输入流
        InputStream in = sc.getInputStream();
        byte[] bys =new byte[1024];
            int len= in.read(bys);
        String str =new String(bys,0,len);
        System.out.println(str);
        //获取输出流
        OutputStream out =sc.getOutputStream();
        out.write("收到了".getBytes());
        sc.close();
    }
 public static void main(String[] args) throws IOException {
        //创建一个Socket对象
        Socket s = new Socket("127.0.0.1",8888);
        //获取输出流
        OutputStream out = s.getOutputStream();
        out.write("hhh".getBytes());
        //获取输入流
        InputStream in =s.getInputStream();
        byte [] bys= new byte[1024];
        int len =in.read(bys);
        String str =new String(bys,0,len);
        System.out.println(str);
        s.close();

    }

使用包装优化添加输入输出
服务器端

package 网络编程.TCP数据.键盘录入;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
    public static void main(String[] args) throws IOException {
        //创建服务sock
        ServerSocket ser =new ServerSocket(8888);
        //获取接收字节对象

            Socket soc= ser.accept();
            //接收获得的数据
            BufferedReader bf =new BufferedReader(new InputStreamReader(soc.getInputStream()));
            String str =null;
            while ((str=bf.readLine())!=null){
                System.out.println(str);
            }

                soc.close();


    }
}

客户端

package 网络编程.TCP数据.键盘录入;

import java.io.*;
import java.net.Socket;
import java.util.Scanner;

public class 客户端 {
    public static void main(String[] args) throws IOException {
        Scanner scan =new Scanner(System.in);
        //获取sockey对象
        Socket sockey =new Socket("127.0.0.1",8888);
        //将输出的字符流变为字节流进行包装自动换行
        BufferedWriter br =new BufferedWriter(new OutputStreamWriter(sockey.getOutputStream()));
        //把输入的字节流解码成字符流
        BufferedReader bs =new BufferedReader(new InputStreamReader(System.in));

        String str =null;
        while ((str=bs.readLine())!=null){

            br.write(str);
            br.newLine();
            br.flush();//刷新缓冲区
        }
        br.close();
        sockey.close();

    }
}

多线程TCP优化

package 网络编程.TCP数据.多线程优化代码;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class Maindemo {
    public static void main(String[] args) throws IOException {
        //创建服务端口
        ServerSocket ser =new ServerSocket(9999);
        //创建客户端的对象
        Socket soc =new Socket("127.0.0.1",9999);
        Server server =new Server(ser);
        KEHUDUAN kehuduan =new KEHUDUAN(soc);
        Thread thrser = new Thread(server);
        Thread thrkehuduan = new Thread(kehuduan);
        thrser.start();
        thrkehuduan.start();

    }
}

客户端

package 网络编程.TCP数据.多线程优化代码;

import java.io.*;
import java.net.Socket;

public class KEHUDUAN implements Runnable{
    private Socket s;
    public KEHUDUAN (Socket s){
        this.s=s;
    }
    @Override
    public void run() {
        try {
//把输入内容通过转换到字节流
        BufferedReader bf =new BufferedReader(new InputStreamReader(System.in));
//把内容写到服务端
            BufferedWriter bw =new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
            String line =null;
            while ((line=bf.readLine())!=null){
                bw.write(line);
                bw.newLine();
                bw.flush();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            try {
                s.close();
            } catch (IOException e) {
                e.printStackTrace();
            }

        }


    }
}

服务端

package 网络编程.TCP数据.多线程优化代码;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;

public class Server implements Runnable{

    private ServerSocket ser;
    public Server(ServerSocket ser){

        this.ser=ser;
    }


    @Override
    public void run() {
        //创建服务sock
        Socket s=null;


        try {


        //获取接收字节对象

          s= ser.accept();
        //接收获得的数据
        BufferedReader bf =new BufferedReader(new InputStreamReader(s.getInputStream()));
        String str =null;
        while ((str=bf.readLine())!=null){
            System.out.println(str);
        }
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            try {
                ser.close();
                s.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值