计算机网络 angularjs multithreading kubernetes msbuild Fries vue例子 郑州网站建设 jquery的each循环 jquery遍历子元素 oracle修改字段默认值 java 大文件上传 python输出函数 python中count python变量类型 python做界面 javaindexof java环境搭建 java8特性 java的包 java编译 java时间函数 java开发环境安装 如何查看java版本 java入门代码 java读文件 摩尔斯电码翻译器 phpqrcode c语言表白代码 begininvoke 3389扫描器 魔兽七个人 图片轮播代码 苹果手机总是自动重启 驱动程序更新 拍照姿势的摆法女 脚本文件 js数组操作 ae添加关键帧 ps提高像素
当前位置: 首页 > 学习教程  > 编程语言

网络编程第一章总结(上)

2020/12/5 10:13:59 文章标签:

1、理解网络编程和套接字 1.1、理解网络编程和套接字 套接字分为客户端套接字和服务端的套接字,客户端套接字主要包含socket和connect两个函数,而服务器端主要有socket、bind、listen和accept四个函数 1.1.1、客户端套接字 socket生成套接字&#xf…

1、理解网络编程和套接字

1.1、理解网络编程和套接字

套接字分为客户端套接字和服务端的套接字,客户端套接字主要包含socket和connect两个函数,而服务器端主要有socket、bind、listen和accept四个函数

1.1.1、客户端套接字

socket生成套接字:

int socket(int domain, int type, int protocol)

成功时返回文件描述符,失败时返回-1.

connect向服务器发送请求:

int connect(int sockfd, struct sockaddr *serv_addr, socklen_t addrlen)

成功返回0,失败返回-1.

1.1.2、服务器端套接字

socket生成套接字:

int socket(int domain, int type, int protocol);

与客户端相同,成功时返回文件描述符,失败时返回-1 。

bind分配ip地址和端口号:

int bind(int sockfd, struct sockaddr *myaddr, socklen_t adrlen);

成功时返回0,失败返回-1。

listen将套接字转化为可接受连接状态:

int listen(int sockfd, int backlog);

成功返回0,失败返回-1。

accept受理连接请求:

int accept(int sockfd, struct sockaddr *addr, socklen_t *adrlen)

成功返回文件描述符,失败返回-1.

1.2、基于linux的文件操作

1.2.1、打开文件

linux打开文件使用open函数:

int open(const char *path, int flag);

成功返回文件描述符,失败返回-1 。
ps:flag表示打开模式 如果需要多种打开模式 需要使用位或运算符组合
O_CREAT 必要时候创建文件
O_TRUNC 删除全部现有数据
O_APPEND 维持已有数据,保存到其后面
O_RDONLY 只读
O_WRONLY 只写
O_RDWR 读写

1.2.2、将数据写入文件:

linux写入文件使用write函数:

ssize_t write(int fd, const void *buf, size_t nbytes);
//typedef unsignde int size_t; typedef int ssize_t;//在sys/types.h中由typedef声明定义

成功返回字节数,失败返回-1。
ps:fd:表示文件描述符,buf:保存传输数据的缓冲地址值,nbytes:传输数据的字节数。

1.2.3、读取文件中的数据:

linux读取文件使用read函数:

ssize_t read(int fd, void *buf, size_t nbytes);

成功时返回接收的字节数,遇到文件结尾时返回0,失败返回-1。
ps:fd:显示接收对象的文件描述符,buf保存接收数据的缓冲地址值,nbytes表示要接收的最大字节数。

示例

写入文件

#include<stdio.h>
#include<stdlib.h>
#include<fcntl.h>
#include<unistd.h>
void error_handling(char *message);

int main(void)
{
   int fd = open("data.txt", O_CREAT|O_WRONLY|O_TRUNC);
   char buf[] = "hello, world !\n";
   if(fd == -1)
    error_handling("open, error!");
   printf("file descriptor: %d \n", fd);
   if(write(fd, buf, sizeof(buf)) == -1)
    error_handling("wirte error!");
   close(fd);
   return 0;
}

void error_handling(char *message)
{
    fputs(message, stderr);
    fputc('\n', stderr);
    exit(1);
}

读取文件

#include<stdio.h>
#include<stdlib.h>
#include<fcntl.h>
#include<unistd.h>
#define BUF_SIZE 100
void error_handling(char *message);

int main(void)
{
   int fd = open("data.txt", O_RDONLY);
   char buf[BUF_SIZE];
   if(fd == -1)
   	error_handling("open, error!");
   printf("file descriptor: %d \n", fd);
   if(read(fd, buf, sizeof(buf)) == -1)
   	error_handling("read error!");
   printf("file data: %s", buf);
   close(fd);
   return 0;
}

void error_handling(char *message)
{
    fputs(message, stderr);
    fputc('\n', stderr);
    exit(1);
}

参考:TCPIP网络编程 [韩] 尹圣雨


本文链接: http://www.dtmao.cc/news_show_450176.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?