int Create() {//创建一个套接字 //套接字(socket)是一个抽象层,应用程序可以通过它发送或接收数据,可对其进行像对文件一样的打开、读写和关闭等操作 int created = (sock = socket(AF_UNIX, SOCK_STREAM, 0)) != -1;//创建一个socket return created;//返回socket的值。创建成功返回1,失败返回0 } void Close() {//关闭套接字并执行一些清理操作 connected = 0; if (sock > 0) close(sock); } int Connect() {//用于在客户端与服务器建立连接 memset(socket_name, 0, sizeof(socket_name));//初始化socket_name全部元素为0 memcpy(&socket_name[0], "\0", 1);//将字符 "\0" 复制到 socket_name 数组的第一个位置,作为字符串的结束符 strcpy(&socket_name[1], SOCKET_NAME);//将 SOCKET_NAME 字符串拷贝到 socket_name 数组的后续位置,将其作为连接时使用的套接字名称 memset(&addr_server, 0, sizeof(struct sockaddr_un));//将 addr_server 结构体初始化为0 addr_server.sun_family = AF_UNIX; // Unix Domain instead of AF_INET IP domain strncpy(addr_server.sun_path, socket_name, sizeof(addr_server.sun_path) - 1); // 108 char max //使用 strncpy 函数将 socket_name 复制到 addr_server.sun_path 成员变量中 //并限制复制的长度为 sizeof(addr_server.sun_path) - 1,确保不会超过 addr_server.sun_path 的最大长度 if (connect(sock, (struct sockaddr *) &addr_server, sizeof(addr_server)) == -1) { Close(); return 0; }改进代码
时间: 2024-04-13 18:27:59 浏览: 81
创建套接字-socket-南大TCPIP Scket 编程
int Create() {
sock = socket(AF_UNIX, SOCK_STREAM, 0);
if (sock == -1) {
return 0;
}
return 1;
}
void Close() {
connected = 0;
if (sock > 0) {
close(sock);
}
}
int Connect() {
memset(socket_name, 0, sizeof(socket_name));
memcpy(&socket_name[0], "\0", 1);
strcpy(&socket_name[1], SOCKET_NAME);
memset(&addr_server, 0, sizeof(struct sockaddr_un));
addr_server.sun_family = AF_UNIX;
strncpy(addr_server.sun_path, socket_name, sizeof(addr_server.sun_path) - 1);
if (!Create()) {
return 0;
}
if (connect(sock, (struct sockaddr *) &addr_server, sizeof(addr_server)) == -1) {
Close();
return 0;
}
return 1;
}
// 改进的代码将创建套接字的逻辑从 Connect() 函数中分离出来,放到了一个单独的 Create() 函数中。
// 这样可以提高代码的可读性和可维护性,并且在 Connect() 函数中可以更好地处理创建套接字失败的情况。
阅读全文