有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步, 认准 https://blog.zysicyj.top
全网最细面试题手册,支持艾宾浩斯记忆法。这是一份最全面、最详细、最高质量的 java 面试题,不建议你死记硬背,只要每天复习一遍,有个大概印象就行了。https://store.amazingmemo.com/chapterDetail/1685324709017001`
原生 Socket 编程
Socket 编程是一种网络编程的技术,它允许计算机之间通过网络进行数据交换。在进行原生 Socket 编程时,你将直接使用操作系统提供的 Socket API 来创建网络应用。以下是一些基本概念和步骤,以及如何在不同的编程语言中实现它们。
基本概念
- Socket: 一个网络通信的端点,你可以通过它发送或接收数据。
- TCP/IP: 一种网络协议,它定义了数据如何在网络中传输。
- 端口号 : 一个数字,用于区分同一台计算机上的不同服务或应用程序。
- IP 地址 : 用于标识网络中的设备的地址。
编程步骤
- 创建 Socket
- 绑定 Socket 到本地地址和端口
- 监听连接(仅限服务器端)
- 接受连接(仅限服务器端)
- 连接到服务器(仅限客户端)
- 发送和接收数据
- 关闭 Socket
示例代码
Python
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('localhost', 12345))
s.listen(5)
clientsocket, address = s.accept()
clientsocket.send("Hello World".encode())
clientsocket.close() s.close()
|
Java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| import java.net.ServerSocket; import java.net.Socket; import java.io.OutputStream; import java.io.PrintWriter;
public class Server { public static void main(String[] args) throws Exception { ServerSocket serverSocket = new ServerSocket(12345);
Socket clientSocket = serverSocket.accept();
OutputStream outputStream = clientSocket.getOutputStream(); PrintWriter printWriter = new PrintWriter(outputStream, true); printWriter.println("Hello World");
printWriter.close(); clientSocket.close(); serverSocket.close(); } }
|
C++
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
| #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <unistd.h> #include <iostream>
int main() { int server_fd = socket(AF_INET, SOCK_STREAM, 0);
struct sockaddr_in address; address.sin_family = AF_INET; address.sin_addr.s_addr = INADDR_ANY; address.sin_port = htons(12345);
bind(server_fd, (struct sockaddr *)&address, sizeof(address));
listen(server_fd, 3);
int addrlen = sizeof(address); int new_socket = accept(server_fd, (struct sockaddr *)&address, (socklen_t*)&addrlen);
std::string hello = "Hello World"; send(new_socket, hello.c_str(), hello.size(), 0);
close(new_socket); close(server_fd);
return 0; }
|
在进行原生 Socket 编程时,你需要对网络编程有一定的了解,并且熟悉你所使用的编程语言的 Socket API。上面的示例代码仅展示了最基本的 Socket 操作,实际应用中可能需要处理更多的网络事件和错误。