ubuntu下的socket编程

来源:互联网 发布:飞控地面站软件 编辑:程序博客网 时间:2024/05/17 09:27

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。

      



原创粉丝点击