【计算机网络】TCP socket编程

目录

​编辑

一、前言

二、概念

1、通信模型:

2、端口:

3、IP地址:

4、协议:

三、简单搭建

1、服务器代码

2、客户端代码


一、前言

Socket(套接字)是计算机网络中用于实现进程之间通信的一种机制。它提供了一种统一的编程接口,允许不同的计算机之间通过网络传输数据。套接字是网络编程的基础,它被广泛用于实现各种网络应用,包括Web浏览器、邮件客户端、文件传输等。

二、概念

1、通信模型:

Socket使用客户端-服务器(Client-Server)模型,其中一个进程充当服务器,等待接受客户端的连接请求,而另一个进程充当客户端,通过网络连接到服务器。

2、端口:

在Socket通信中,端口是一个数字,用于标识一个特定的进程。端口的范围是0到65535,其中0到1023是保留端口,一般用于系统服务,而1024到65535是可用于自定义应用的端口范围。

3、IP地址:

IP地址用于标识网络中的设备,分为IPv4和IPv6。IPv4地址通常以点分十进制表示,例如,127.0.0.1是本地主机地址。IPv6则使用冒号分隔的16进制表示。

4、协议:

常见的套接字通信协议有TCP(Transmission Control Protocol)和UDP(User Datagram Protocol)。TCP提供可靠的、面向连接的通信,而UDP是无连接的、不可靠的通信,适用于一些实时性要求较高的应用。

在Socket编程中,通常有两种类型的套接字:服务器套接字和客户端套接字。服务器套接字用于监听连接请求,而客户端套接字用于发起连接请求。通过套接字,进程可以在网络上发送和接收数据,实现进程之间的通信。套接字编程通常涉及套接字的创建、绑定、监听(服务器端)、连接(客户端)、发送和接收数据等操作。

三、简单搭建

在Java中实现TCP Socket编程也是相对简单的,以下是一个简单的例子,包括服务器端和客户端的代码:

1、服务器代码

复制代码
import java.io.*;
import java.net.*;

public class TCPServer {
    public static void main(String[] args) {
        ServerSocket serverSocket = null;

        try {
            // 创建服务器套接字,绑定端口
            serverSocket = new ServerSocket(8888);
            System.out.println("服务器已启动,等待客户端连接...");

            // 等待客户端连接
            Socket clientSocket = serverSocket.accept();
            System.out.println("客户端已连接,地址:" + clientSocket.getInetAddress());

            // 获取输入流和输出流
            BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
            PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);

            // 接收客户端数据
            String receivedMessage = in.readLine();
            System.out.println("收到客户端数据: " + receivedMessage);

            // 发送数据给客户端
            out.println("Hello, client!");

            // 关闭连接
            in.close();
            out.close();
            clientSocket.close();
            serverSocket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

2、客户端代码

复制代码
import java.io.*;
import java.net.*;

public class TCPClient {
    public static void main(String[] args) {
        Socket socket = null;

        try {
            // 创建客户端套接字,连接服务器
            socket = new Socket("localhost", 8888);
            System.out.println("连接服务器成功.");

            // 获取输入流和输出流
            BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            PrintWriter out = new PrintWriter(socket.getOutputStream(), true);

            // 发送数据给服务器
            out.println("Hello, server!");

            // 接收服务器数据
            String receivedMessage = in.readLine();
            System.out.println("收到服务器数据: " + receivedMessage);

            // 关闭连接
            in.close();
            out.close();
            socket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

以上代码简单地创建了一个TCP服务器端和客户端,服务器端在端口8888上监听客户端的连接请求,接收数据后发送一条欢迎消息。客户端连接到服务器,发送一条消息,然后接收服务器的响应。在实际应用中,你可能需要更多的错误处理和线程管理。

我的其他博客

简单介绍一些其他的树-CSDN博客

认识二叉树(详细介绍)-CSDN博客

正则表达式详细讲解-CSDN博客

低代码开发:创新之道还是软件开发的捷径?-CSDN博客

HTTP与HTTTPS的区别-CSDN博客

什么情况下会产生StackOverflowError(栈溢出)和OutOfMemoryError(堆溢出)怎么排查-CSDN博客

在多线程中sleep()和wait()的区别(详细)-CSDN博客

谈谈我对HashMap扩容机制的理解及底层实现-CSDN博客

堆排序详细讲解(一文足矣JAVA)-CSDN博客

相关推荐
在荒野的梦想12 小时前
Java 调用 OpenAI / Claude API 完整实战指南
java
小王不爱笑13212 小时前
计算机网络核心概念
计算机网络
代码探秘者12 小时前
【算法篇】3.位运算
java·数据结构·后端·python·算法·spring
李白的粉12 小时前
基于springboot的新闻稿件管理系统
java·spring boot·毕业设计·课程设计·源代码·新闻稿件管理系统
Trouvaille ~12 小时前
【项目篇】从零手写高并发服务器(七):定时器TimerWheel与线程池
运维·服务器·网络·c++·reactor·高并发·muduo库
零雲12 小时前
java面试:了解Redis的分布式限流算法么?
java·redis·面试
XiYang-DING12 小时前
【Java SE】JVM字符串常量池:位置、创建流程、对象个数与 `intern()`
java·开发语言·jvm
平生幻12 小时前
【数据结构】-复杂度
java·开发语言·数据结构
222you12 小时前
JUC当中的几个计数类
java·开发语言
xdl259912 小时前
如何快速搭建简单SpringBoot项目网页
java·spring boot·intellij-idea