ubuntu下的socket编程

1、server端:

      socket() ---- bind()----listen()----accept()

      可通过在终端键入 man socket 类似的 man 命令来查看各个函数的用法, 需要注意的是上面的socket初始化流程中,比较复杂的也许就是bind中要绑定一个地址结构了,在IPv4下,可声明 struct sockaddr_in ,但调用相关函数的时候需转化为 struct sockaddr*的通用地址类型。还有就是 accept 的最后两个参数用来保存连入的客户端的相关地址信息。

      在从 server 断传一个文件到 client 端的时候, 因阻塞 recv 的情况,故难以判断何时整个文件传输完毕。我想到的一个办法是,当 server 向 client 传文件之前先向其传送一个文件的长度,client 端通过接收数据的总长度是否等于该总长度来判断文件是否读写完毕。server 端取得文件长度的方法是 先通过 fseek函数将文件位置设为文件尾巴,此时 ftell 的值就是文件大小了。注意传文件前还需再次调用 fseek 将文件位置设为文件头,否则 fread 将读不到数据。具体函数用法通过 man 去查询。如果有其他判断文件接收完毕的方法,欢迎交流。 

      我写的一个简单的server.c 见server.c。

      



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Ubuntu系统下进行socket编程,需要使用C语言中的socket编程接口。以下是一个简单的示例代码: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/socket.h> #include <arpa/inet.h> int main() { int socket_desc, client_sock, c, read_size; struct sockaddr_in server, client; char client_message[2000]; // 创建socket socket_desc = socket(AF_INET, SOCK_STREAM, 0); if (socket_desc == -1) { printf("Could not create socket"); } // 绑定IP地址和端口号 server.sin_family = AF_INET; server.sin_addr.s_addr = INADDR_ANY; server.sin_port = htons(8888); if (bind(socket_desc, (struct sockaddr *)&server, sizeof(server)) < 0) { printf("bind failed"); return 1; } printf("bind done"); // 监听连接 listen(socket_desc, 3); // 等待连接 printf("Waiting for incoming connections...\n"); c = sizeof(struct sockaddr_in); client_sock = accept(socket_desc, (struct sockaddr *)&client, (socklen_t*)&c); if (client_sock < 0) { printf("accept failed"); return 1; } printf("Connection accepted"); // 接收客户端消息并回复 while ((read_size = recv(client_sock, client_message, 2000, 0)) > 0) { printf("Received message: %s\n", client_message); write(client_sock, client_message, strlen(client_message)); memset(client_message, 0, 2000); } if (read_size == 0) { printf("Client disconnected"); } else if (read_size == -1) { printf("recv failed"); } return 0; } ``` 这是一个简单的TCP服务器示例代码,它监听本地IP地址的8888端口,等待客户端连接请求。当客户端连接成功后,服务器会接收客户端发送的消息,并回复同样的消息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值