返回
socket开发基本知识
闲谈
2023-10-26 20:27:16
socket的本质与类型
socket是一种跨平台的应用程序接口,它允许应用程序通过网络进行通信。socket是一个抽象的概念,它代表了一个网络连接的端点,也就是一个网络地址和一个端口号。应用程序可以通过socket来发送和接收数据,就像使用一个普通的文件一样。
socket有两种主要类型:流式socket和数据报socket。流式socket用于传输连续的数据流,例如视频流或音频流。数据报socket用于传输单个的数据包,例如电子邮件或网页。
建立socket连接
要建立socket连接,需要经历以下几个步骤:
- 创建一个socket对象。
- 将socket对象绑定到一个本地网络地址和端口号。
- 将socket对象连接到远程网络地址和端口号。
socket编程步骤
编写socket程序时,通常需要经历以下几个步骤:
- 头文件。
- 初始化socket。
- 配置socket。
- 通信。
- 关闭socket。
socket编程常见陷阱
在socket编程时,需要注意以下几个常见陷阱:
- 不要阻塞socket操作。
- 不要使用未初始化的socket对象。
- 不要在同一个socket上同时进行读写操作。
- 不要关闭已经断开的socket。
实践案例:一个简单的socket服务器和客户端
为了加深对socket的理解,我们编写一个简单的socket服务器和客户端程序。
// socket服务器代码
#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
int main() {
// 创建socket对象
int server_socket = socket(AF_INET, SOCK_STREAM, 0);
// 将socket对象绑定到本地网络地址和端口号
struct sockaddr_in server_address;
server_address.sin_family = AF_INET;
server_address.sin_addr.s_addr = INADDR_ANY;
server_address.sin_port = htons(8080);
bind(server_socket, (struct sockaddr *)&server_address, sizeof(server_address));
// 监听socket连接
listen(server_socket, 5);
// 接受客户端连接
int client_socket = accept(server_socket, NULL, NULL);
// 与客户端通信
char buffer[1024];
recv(client_socket, buffer, sizeof(buffer), 0);
send(client_socket, "Hello, world!", 13, 0);
// 关闭socket连接
close(client_socket);
close(server_socket);
return 0;
}
// socket客户端代码
#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
int main() {
// 创建socket对象
int client_socket = socket(AF_INET, SOCK_STREAM, 0);
// 将socket对象连接到远程网络地址和端口号
struct sockaddr_in server_address;
server_address.sin_family = AF_INET;
server_address.sin_addr.s_addr = inet_addr("127.0.0.1");
server_address.sin_port = htons(8080);
connect(client_socket, (struct sockaddr *)&server_address, sizeof(server_address));
// 与服务器通信
char buffer[1024];
send(client_socket, "Hello, server!", 14, 0);
recv(client_socket, buffer, sizeof(buffer), 0);
// 关闭socket连接
close(client_socket);
return 0;
}