网络编程之TCP

TCP:收到会回复确认,通信两端需要建立连接,属于可靠协议,数据不容易丢失,发送大小无限制,但效率低耗费资源。 

一案例演示: TCP编程,客户端向服务器发送数据

        //TCP 需要两端建立连接
        //TCP 的客户端套接字  Socket
        //  Socket  此类实现客户端套接字(也可以就叫“套接字”)。套接字是两台机器间通信的端点。
        //  Socket(InetAddress address, int port)
        //  创建一个流套接字并将其连接到指定 IP 地址的指定端口号。
        //
        //  Socket(String host, int port)
        //  创建一个流套接字并将其连接到指定主机上的指定端口号。
        //参数1 服务器的IP 服务器的端口

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

public class TCPclient {
    public static void main(String[] args) throws IOException {
        Socket socket= new Socket("192.168.8.73",9999) ;//创建客户端套接字
        OutputStream out = socket.getOutputStream();//获取通道内的流,使用流来获取通道内的数据
        out.write("这是客户端发给服务器的数据".getBytes());
        socket.close();
    }
}
-----------------------------------------------------------------------------------------
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class TCPserver {
    public static void main(String[] args) throws IOException {
        //TCP 服务端的套接字  ServerSocket 此类实现服务器套接字。服务器套接字等待请求通过网络传入。
        //ServerSocket( int port)
        //创建绑定到特定端口的服务器套接字。
        ServerSocket ss = new ServerSocket(9999);
        System.out.println("服务器端已开启");
        //监听客户端,此方法在客户端数据传入之前一直处于阻塞状态,accept()侦听并接收此套接字的连接
        Socket accept = ss.accept();
        //获取通道内的输入流
        InputStream in = accept.getInputStream();
        byte[] bytes = new byte[1024];
        int len = in.read(bytes);
        System.out.println(new String(bytes,0,len));

        ss.close();
    }
}

 二案例演示: TCP编程,客户端从键盘向服务器发送数据,

public class TCPClient {
    public static void main(String[] args) throws IOException {
        //客户端键盘录入,服务端输出
        Socket socket = new Socket("192.168.8.73", 9999);
        //获取通道中的输出流
        OutputStream out = socket.getOutputStream();
        //键盘录入
        BufferedReader bfr = new BufferedReader(new InputStreamReader(System.in));
        //包装通道中的字节输出流
        BufferedWriter bfw = new BufferedWriter(new OutputStreamWriter(out));
        while (true) {
            System.out.println("请输入字符串");
            String s = bfr.readLine();
            bfw.write(s);
            bfw.newLine();
            bfw.flush();
        }
    }
}
-----------------------------------------------------------------------------------------
public class TCPServer {
    public static void main(String[] args) throws IOException {
        ServerSocket ss = new ServerSocket(9999);
        System.out.println("服务器已经开启....");
        Socket socket = ss.accept();
        InputStream in = socket.getInputStream();
        //包装通道中的输入流
        BufferedReader bfr = new BufferedReader(new InputStreamReader(in));
        while (true) {
            String s = bfr.readLine();
            System.out.println(s);
        }
    }
}

 

三案例演示: TCP编程,客户端向服务器发送数据,服务器给予反馈

public class TCPClient {
    public static void main(String[] args) throws IOException {
        //客户端给服务器发送一个消息后,服务端给客户端一个反馈
        Socket socket = new Socket("192.168.8.73", 9999);
        //获取通道中的输出流
        OutputStream out = socket.getOutputStream();
        out.write("你好服务器".getBytes());

        //读取服务器的反馈
        InputStream in = socket.getInputStream();
        byte[] bytes = new byte[1024];
        int len = in.read(bytes);
        System.out.println(new String(bytes, 0, len));

        //关闭客户端
        socket.close();

    }
}
-----------------------------------------------------------------------------------------
public class TCPServer {
    public static void main(String[] args) throws IOException {
        ServerSocket ss = new ServerSocket(9999);
        System.out.println("服务器已经开启....");
        Socket socket = ss.accept();
        //读取客户端发来的消息
        InputStream in = socket.getInputStream();
        byte[] bytes = new byte[1024];
        int len = in.read(bytes);
        System.out.println(new String(bytes, 0, len));

        //给反馈端一个反馈
        OutputStream out = socket.getOutputStream();
        out.write("你好客户端消息已经收到,放心".getBytes());


        ss.close();
    }
}

 四案例演示: TCP编程,客户端从键盘录入向服务器发送数据,服务器接收到数据后给客户端一个反馈

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Scanner;

public class TCPclient {
    public static void main(String[] args) throws IOException {
        Socket socket = new Socket("192.168.8.73", 9999);
        OutputStream out = socket.getOutputStream();

        Scanner sc=new Scanner(System.in);
        System.out.println("请键盘输入要发给服务器的内容");
        while (sc.hasNextLine()){
            String s = sc.nextLine();
            byte[] bytes = s.getBytes();
            out.write(bytes,0,bytes.length);
            if("886".equals(s)){
                break;
            }
            //读取服务器反馈回的数据
            InputStream in = socket.getInputStream();
            byte[] bytes1 = new byte[1024];
            int len = in.read(bytes1);
           System.out.println(new String(bytes1,0,len));
        }

      socket.close();
    }
}
----------------------------------------------------------------------------------------
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class TCPserver {
    public static void main(String[] args) throws IOException {
        ServerSocket ss = new ServerSocket(9999);
        System.out.println("服务器已开启");
        Socket accept = ss.accept();
        while(true){
            InputStream in = accept.getInputStream();
            byte[] bytes = new byte[1024];
            int len = in.read(bytes);
            String s = new String(bytes, 0, len);
            System.out.println(s);
            if("886".equals(s)){
                break;
            }
            OutputStream out = accept.getOutputStream();
            out.write("我服务器已收到你发来的数据".getBytes());
        }
    }
}

  四案例演示: TCP编程,客户端从键盘录入向服务器发送数据,服务器接收到数据后写入文本文件中

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

public class TCPClient{
    public static void main(String[] args) throws IOException{
        //客户端键盘录入,服务端输出
        Socket socket = new Socket("192.168.8.73", 9999);
        //获取通道中的输出流
        OutputStream out = socket.getOutputStream();
        //键盘录入
        BufferedReader bfr = new BufferedReader(new InputStreamReader(System.in));
        //包装通道中的字节输出流
        BufferedWriter bfw = new BufferedWriter(new OutputStreamWriter(out));
        while (true) {
            System.out.println("请输入字符串");
            String s = bfr.readLine();
            bfw.write(s);
            bfw.newLine();
            bfw.flush();
            if ("886".equals(s)) {
                break;
            }
        }
    }

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

public class TCPServer {
    public static void main(String[] args) throws IOException {
        ServerSocket ss = new ServerSocket(9999);
        System.out.println("服务器已经开启....");
        Socket socket = ss.accept();
        InputStream in = socket.getInputStream();
        //包装通道中的输入流
        BufferedReader bfr = new BufferedReader(new InputStreamReader(in));
        //创建一个输出流,关联文本文件
        BufferedWriter writer = new BufferedWriter(new FileWriter("msg.txt"));
        while (true) {
            String s = bfr.readLine();
            if("886".equals(s)){
                break;
            }
            writer.write(s);
            writer.newLine();
            writer.flush();
        }
        writer.close();
    }
}

   四案例演示: TCP编程,客户端读取文本文件的内容,发给服务器,让服务器输出

public class TCPServer {
    public static void main(String[] args) throws IOException {
        //服务器输出客户端发来的消息
        ServerSocket ss = new ServerSocket(9999);
        System.out.println("服务器已经开启....");
        Socket socket = ss.accept();
        InputStream in = socket.getInputStream();
        //包装通道中的输入流
        BufferedReader bfr = new BufferedReader(new InputStreamReader(in));
        String str=null;
        while ((str=bfr.readLine())!=null){
            System.out.println(str);
        }
    }
}
-----------------------------------------------------------------------------------
public class TCPClient {
    public static void main(String[] args) throws IOException {
        //客户端读取文本文件中的内容,发给服务器,让服务器输出
        //客户端键盘录入,服务端输出
        Socket socket = new Socket("192.168.8.73", 9999);
        //获取通道中的输出流
        OutputStream out = socket.getOutputStream();
        //包装通道中的输出流
        BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(out));
        //创建一个输入流,来关联这个文本文件
        BufferedReader reader = new BufferedReader(new FileReader("msg.txt"));
        //边读取边给服务器写出去
        String line = null;
        while ((line = reader.readLine()) != null) {
            writer.write(line);
            writer.newLine();
            writer.flush();
        }

        reader.close();
        socket.close();


    }
}

    五案例演示: TCP编程文件上传并保存

 

//客户端从文本文件中读取消息,发给服务端,服务端,把客户端发来的消息,保存到文本文件中,就实现了文本文件的上传
public class TCPClient {
    public static void main(String[] args) throws IOException{
        Socket socket = new Socket("192.168.8.73", 9999);
        //获取通道中的输出流
        OutputStream out = socket.getOutputStream();
        //包装通道中的输出流
        BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(out));
        //创建一个输入流,来关联这个文本文件
        BufferedReader reader = new BufferedReader(new FileReader("msg.txt"));
        String line = null;
        while ((line = reader.readLine()) != null) {
            writer.write(line);
            writer.newLine();
            writer.flush();
        }

        reader.close();
        socket.close();
    }
}
-----------------------------------------------------------------------------------------
public class TCPServer {
    public static void main(String[] args) throws IOException {
        ServerSocket ss = new ServerSocket(9999);
        System.out.println("服务器已经开启....");
        Socket socket = ss.accept();
        InputStream in = socket.getInputStream();
        //把通道中的输入流包装成字符流
        BufferedReader reader = new BufferedReader(new InputStreamReader(in));

        //关联一个输出流
        BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("msg1.txt"));

        String line=null;
        while ((line=reader.readLine())!=null){
            bufferedWriter.write(line);
            bufferedWriter.newLine();
            bufferedWriter.flush();
        }

        //释放资源
        bufferedWriter.close();
        ss.close();

    }
}

 六案例演示: TCP编程文件上传并保存,在五的基础上再从服务器给客户端一个反馈 

public class TCPClient {
    public static void main(String[] args) throws IOException{
        Socket socket = new Socket("192.168.8.73", 9999);
        //获取通道中的输出流
        OutputStream out = socket.getOutputStream();
        //包装通道中的输出流
        BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(out));
        //创建一个输入流,来关联这个文本文件
        BufferedReader reader = new BufferedReader(new FileReader("msg.txt"));
        String line = null;
        while ((line = reader.readLine()) != null) {
            writer.write(line);
            writer.newLine();
            writer.flush();
        }
        //我就手写一个标记,发给服务端,我传完了
        writer.write("over");
        writer.newLine();
        writer.flush();

        //我要读取服务端的反馈
        InputStream inputStream = socket.getInputStream();
        byte[] bytes = new byte[1024];
        int len = inputStream.read(bytes);
        System.out.println(new String(bytes, 0, len));
        reader.close();
        socket.close();
    }
}
-----------------------------------------------------------------------------------------
public class TCPServer {
    public static void main(String[] args) throws IOException {
        ServerSocket ss = new ServerSocket(9999);
        System.out.println("服务器已经开启....");
        Socket socket = ss.accept();
        InputStream in = socket.getInputStream();
        //把通道中的输入流包装成字符流
        BufferedReader reader = new BufferedReader(new InputStreamReader(in));

        //关联一个输出流
        BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("msg1.txt"));

        String line=null;
        while ((line=reader.readLine())!=null){
            bufferedWriter.write(line);
            bufferedWriter.newLine();
            bufferedWriter.flush();
        }

        //释放资源
        bufferedWriter.close();
        ss.close();

    }
}

 六案例演示: TCP编程文件上传并保存,六的基础上用socket.shotdownOutput()//文件穿完则关闭输出通道

 

public class TCPClient {
    public static void main(String[] args) throws IOException{
        Socket socket = new Socket("192.168.8.73", 9999);
        //获取通道中的输出流
        OutputStream out = socket.getOutputStream();
        //包装通道中的输出流
        BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(out));
        //创建一个输入流,来关联这个文本文件
        BufferedReader reader = new BufferedReader(new FileReader("msg.txt"));
        String line = null;
        while ((line = reader.readLine()) != null) {
            writer.write(line);
            writer.newLine();
            writer.flush();
        }
        //客户端,已经传完了
        socket.shutdownOutput();//关闭输出通道,服务端那边就不会阻塞了
        //我要读取服务端的反馈
        InputStream inputStream = socket.getInputStream();
        byte[] bytes = new byte[1024];
        int len = inputStream.read(bytes);
        System.out.println(new String(bytes, 0, len));
        reader.close();
        socket.close();
    }
}
-----------------------------------------------------------------------------------------
public class TCPServer {
    public static void main(String[] args) throws IOException {
        //服务端上传文件完成了之后,给客户端一个反馈
        ServerSocket ss = new ServerSocket(9999);
        System.out.println("服务器已经开启....");
        Socket socket = ss.accept();
        InputStream in = socket.getInputStream();
        //把通道中的输入流包装成字符流
        BufferedReader reader = new BufferedReader(new InputStreamReader(in));

        //关联一个输出流
        BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("msg1.txt"));

        String line=null;
        while ((line=reader.readLine())!=null){
            bufferedWriter.write(line);
            bufferedWriter.newLine();
            bufferedWriter.flush();
        }
        System.out.println("=====================");
        //保存完毕后,给客户端一个反馈
        OutputStream outputStream = socket.getOutputStream();
        outputStream.write("文件上传成功".getBytes());

        //释放资源
        bufferedWriter.close();
        ss.close();

    }
}

 七案例演示: TCP编程多个客户端连接服务器-开线程 

public class TCPClient {
    public static void main(String[] args) throws IOException{
        Socket socket = new Socket("192.168.8.73", 9999);
        //获取通道中的输出流
        OutputStream out = socket.getOutputStream();
        //包装通道中的输出流
        BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(out));
        //创建一个输入流,来关联这个文本文件
        BufferedReader reader = new BufferedReader(new FileReader("msg.txt"));
        String line = null;
        while ((line = reader.readLine()) != null) {
            writer.write(line);
            writer.newLine();
            writer.flush();
        }
        //客户端,已经传完了
        socket.shutdownOutput();//关闭输出通道,服务端那边就不会阻塞了
        //我要读取服务端的反馈
        InputStream inputStream = socket.getInputStream();
        byte[] bytes = new byte[1024];
        int len = inputStream.read(bytes);
        System.out.println(new String(bytes, 0, len));
        reader.close();
        socket.close();
    }
}
---------------------------------------------------------------------------------------
public class TCPServer {
    public static void main(String[] args) throws IOException {
        //服务端上传文件完成了之后,给客户端一个反馈
        ServerSocket ss = new ServerSocket(9999);
        System.out.println("服务器已经开启....");
        int i=1;
        while (true){
            Socket socket = ss.accept();
            System.out.println((i++)+"个客户端已经连接");
            new ServerThread(socket).start();
        }

    }
}
--------------------------------------------------------------------------------------
public class ServerThread extends Thread {
    Socket socket;

    public ServerThread(Socket socket) {
        this.socket = socket;
    }

    @Override
    public void run() {
        try {
            InputStream in = socket.getInputStream();
            //把通道中的输入流包装成字符流
            BufferedReader reader = new BufferedReader(new InputStreamReader(in));
            //关联一个输出流
            BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(System.currentTimeMillis()+"msg1.txt"));

            String line = null;
            while ((line = reader.readLine()) != null) {
                bufferedWriter.write(line);
                bufferedWriter.newLine();
                bufferedWriter.flush();
            }
            System.out.println("=====================");
            //保存完毕后,给客户端一个反馈
            OutputStream outputStream = socket.getOutputStream();
            outputStream.write("文件上传成功".getBytes());

            //释放资源
            bufferedWriter.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
-----------------------------------------------------------------------------------------

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值