【计算机网络】TCP socket编程

简介: 【计算机网络】TCP socket编程



 

一、前言

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上监听客户端的连接请求,接收数据后发送一条欢迎消息。客户端连接到服务器,发送一条消息,然后接收服务器的响应。在实际应用中,你可能需要更多的错误处理和线程管理。


相关文章
|
16天前
|
安全 Java 数据处理
Python网络编程基础(Socket编程)多线程/多进程服务器编程
【4月更文挑战第11天】在网络编程中,随着客户端数量的增加,服务器的处理能力成为了一个重要的考量因素。为了处理多个客户端的并发请求,我们通常需要采用多线程或多进程的方式。在本章中,我们将探讨多线程/多进程服务器编程的概念,并通过一个多线程服务器的示例来演示其实现。
|
16天前
|
程序员 开发者 Python
Python网络编程基础(Socket编程) 错误处理和异常处理的最佳实践
【4月更文挑战第11天】在网络编程中,错误处理和异常管理不仅是为了程序的健壮性,也是为了提供清晰的用户反馈以及优雅的故障恢复。在前面的章节中,我们讨论了如何使用`try-except`语句来处理网络错误。现在,我们将深入探讨错误处理和异常处理的最佳实践。
|
15天前
|
存储 算法 Linux
【实战项目】网络编程:在Linux环境下基于opencv和socket的人脸识别系统--C++实现
【实战项目】网络编程:在Linux环境下基于opencv和socket的人脸识别系统--C++实现
39 6
|
3天前
|
存储 网络协议 关系型数据库
Python从入门到精通:2.3.2数据库操作与网络编程——学习socket编程,实现简单的TCP/UDP通信
Python从入门到精通:2.3.2数据库操作与网络编程——学习socket编程,实现简单的TCP/UDP通信
|
8天前
|
网络协议 Linux Windows
TCP/IP、Http、Socket之间的区别
TCP/IP、Http、Socket之间的区别
|
11天前
|
网络协议 Ubuntu Unix
Linux 下使用 socket 实现 TCP 客户端
Linux 下使用 socket 实现 TCP 客户端
|
15天前
|
网络协议 Java API
Python网络编程基础(Socket编程)Twisted框架简介
【4月更文挑战第12天】在网络编程的实践中,除了使用基本的Socket API之外,还有许多高级的网络编程库可以帮助我们更高效地构建复杂和健壮的网络应用。这些库通常提供了异步IO、事件驱动、协议实现等高级功能,使得开发者能够专注于业务逻辑的实现,而不用过多关注底层的网络细节。
|
20天前
|
网络协议 程序员 Python
pythonTCP客户端编程创建Socket对象
【4月更文挑战第6天】本教程介绍了TCP客户端如何创建Socket对象。Socket作为网络通信的基础单元,包含协议、IP地址和端口等信息。在TCP/IP中,Socket分为流式(TCP)、数据报(UDP)和原始套接字。以Python为例,创建TCP Socket对象需调用`socket.socket(AF_INET, SOCK_STREAM)`。为确保健壮性,应使用异常处理处理可能的`socket.error`。学习本教程将帮助你掌握TCP客户端创建Socket对象的技能。
|
1月前
|
网络协议 安全 API
计算机网络之Socket编程
计算机网络之Socket编程
|
2月前
|
网络协议 安全 开发者
Python 中的 Socket 编程
Python 中的 Socket 编程
44 4