【计算机网络】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博客

相关推荐
盖世英雄酱581369 分钟前
🚀不改SQL,也能让SQL的执行效率提升100倍
java·数据库·后端
Java技术小馆20 分钟前
Cursor链接远程服务器实现项目部署
java
用户05956611920926 分钟前
深入理解Spring Boot框架:从基础到实践
java·spring·编程语言
西北大程序猿27 分钟前
服务器代码知识点补充
服务器·开发语言·网络·c++·网络协议
晴空月明32 分钟前
JVM 类加载过程与字节码执行深度解析
java
掉鱼的猫1 小时前
Solon AI + MCP实战:5行代码搞定天气查询,LLM从此告别数据孤岛
java·openai·mcp
带刺的坐椅2 小时前
Solon AI + MCP实战:5行代码搞定天气查询,LLM从此告别数据孤岛
java·mcp·solon-ai
androidwork2 小时前
嵌套滚动交互处理总结
android·java·kotlin
TE-茶叶蛋2 小时前
WebSocket 前端断连原因与检测方法
前端·websocket·网络协议
草履虫建模3 小时前
Tomcat 和 Spring MVC
java·spring boot·spring·spring cloud·tomcat·mvc·intellij-idea