当前位置:   article > 正文

基于TCP 协议 的 C/S程序

基于TCP 协议 的 C/S程序


前言

网络编程可分为B/S(浏览器与服务器)程序与C/S(客户端与服务器)程序,本文将针对TCP协议的C/S程序的相关知识,进行一些简单的梳理与总结。


一、使用到的类

需要使用到两个类来编写TCP协议的C/S程序,分别为:

  1. ServerSocket
  2. Socket
    两个类之间的信息交流是通过socket(套接字,通信端点)来进行的。

1.ServerSocket

用于创建服务器 。 创建完毕后, 会绑定一个端口号.,然后此服务器可以等待客户端连接 , 每连接一个客户端 , 服务器就会得到一个新的Socket对象。

1.1 常用构造方法

ServerSocket(int port);
  • 1

创建一个基于TCP/IP协议的服务器 , 并绑定指定的端口号. 注意: 参数port的范围是: 0-65535 (建议1025-65535,因为前面的端口可能已经被占用)

1.2 常用方法

Socket accept();
  • 1

等待客户端连接。注意,此方法会导致线程的阻塞,直到一个新的客户端连接成功, return Socket对象后, 线程才会继续执行

void close();
  • 1

释放占用的端口号并关闭服务器.

2. Socket

是两台计算机之间通信的端点 , 是网络驱动提供给应用程序编程的一种接口 ,一套标准, 一种机制。

2.1 构造方法

Socket(String ip,int port)
  • 1

创建一个套接字, 并连接指定ip和端口号的服务器。
参数1: 服务器的ip地址;
参数2: 服务器软件的端口号。

2.2 常用方法

OutputStream getOutputStream();
  • 1

返回的是 , 指向通通信的另一端点的输出流。

InputStream getInputStream();
  • 1

返回的是 , 指向通信的另一端点的输入流

void close();
  • 1

关闭套接字

注意:在网络编程时, 获取输入输出流的操作 ,对于客户端与服务器来说是相对的 。客户端的输入流输入的是服务器的输出流输出的内容;客户端的输出流输出到了服务器的输入流中。 所以在使用时, 需要注意以下一点规则:
客户端与服务器获取流的顺序必须是相反的:。例如:客户端先得到了输入流 , 那服务器必须先获取输出流

二、代码示例

1. 服务器

package demo;

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

/**
 * 网络编程
 */
public class Demo1 {
    /**
     * TCP协议
     * 服务器
     * @param args
     */
    public static void main(String[] args) throws IOException {
        //搭建一个服务器
        ServerSocket server = new ServerSocket(55565);
        //服务器启动完毕

        System.out.println("服务器启动完毕");
        //等待客户端的连接
        Socket socket = server.accept();
        System.out.println("一个客户端连接了");
    //服务器给客户端发消息
        //获取输出流
        OutputStream os = socket.getOutputStream();
        //转成打印流
        PrintStream ps = new PrintStream(os);
        ps.println("欢迎你连接服务器");

    //服务器接收客户端的消息
        InputStream is = socket.getInputStream();
        BufferedReader br = new BufferedReader(new InputStreamReader(is));
        String text = br.readLine();
        System.out.println("服务器接收到客户端的回复:"+text);

        System.out.println("服务器程序执行结束");
    }
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41

2.客户端

package demo;

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

public class ClientDemo1 {
    /**
     * 客户端U
     * @param args
     */
    public static void main(String[] args) throws IOException {
        Socket socket = new Socket("127.0.0.1",55565);//参数1也可以写localhost
    //客户端可以接收服务器发来的消息
        //获取输入流
        InputStream is = socket.getInputStream();
        //转成BufferReader ,可以一次读一行
        BufferedReader br = new BufferedReader(new InputStreamReader(is));
        //读取
        String text = br.readLine();
        System.out.println("客户端接到消息:"+text);

    //客户端也可以给服务器发消息
        OutputStream os = socket.getOutputStream();
        PrintStream ps = new PrintStream(os);
        ps.println("服务器你好");

    }
}


  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

总结

以上内容为小白最近学习到的网络编程知识,主要是为了对自己的学习进行一个归纳整理,希望大家可以多多指教。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/988073
推荐阅读
相关标签
  

闽ICP备14008679号