服务器与Socket操作

发布时间:2022-06-26 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了服务器与Socket操作脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

与Socket 相关的概念:

1.客户/服务器模型

2.用管道来双向通信

3.协同进程

4.文件/进程的相似性

5.socket 的概念及使用

6.网络服务

7.socket 编写客户端,服务器程序

 

linux 的 数据源类型:

1.磁盘文件,read/write 读/写

2.设备文件 read/write 读/写

3.管道,pipe 创建,fork 创建,read/wirte 读/写

4.sockets socket、line和connect连接,read/write 读/写

 

客户/服务器模型:

双向通信:

永久性服务:协同进程

一个客户/服务器模型程序要成为协同系统必须有明确指明消息结束的方法,并且程序必须使用简单并可预测的请求和应答。

 

fdopen:让文件描述符像文件一样使用

#include <stdio.h>

FILE *fopen(const char *path, const char *mode);

FILE *fdopen(int fd, const char *mode);

FILE *freopen(const char *path, const char *mode, FILE *stream);

返回 FILE 类型的值,以文件描述符作为参数

 

popen :让进程看似文件

FILE *fp;

fp=open("file1","r");

c=getc(fp);

fgets(buf, len ,fp);

fscnf(fp, "%d %d %s",&x,&y,x);

fclose(fp);

 

FILE *fp;

fp=popen("ls","r");

fgets(buf, len ,fp);

pclose(fp);

 

pclosepopen 是必须的。进程在产生之后必须等待退出运行,否则会称为zombie。pclose中调用了wait函数等待进程的结束

popen :运行一个程序并返回指向该程序的标准输入或者标准输出的连接。

#include <stdio.h>

FILE *popen(const char *command, const char *type);

int pclose(FILE *stream);

 

访问数据:

1.从文件获取数据,fopen。依赖于特定的文件格式和结构体中的特定成员名称

2.从函数获取数据:静态库、共享库

3.从进程获取数据:和服务器连接

 

socket:与远端进程相连

socket允许在不相关的进程间创建类似管道的连接,甚至可以通过socket连接其他主机上的进程,

概念:

1.客户和服务器:服务器是提供服务的程序

2.主机名和端口。

3.地址族:

4.协议:服务器和客户之间交互的规则。

 

telnet:连接远端的服务器。

服务器编写:

1.向内核申请一个socket: socket 

#include <sys/types.h> /* See NOTES */ #include <sys/socket.h>

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

 

  domain=通信域:PF_INET 适用于Internet socket

  type=socket的类型,

  protocol=协议

  sockid:返回值,-1=失败,其余=成功

socket 调用创建一个通信端点并返回一个标识符。存在很多中类型的通信系统,每个系统都是一个通信域。

socket 的类型指出程序将要使用的数据流类型。

协议指的是内核中网络代码所使用的协议,不是客户端/服务器之间的协议。0=标准协议

2.绑定地址到socket 上,地址包括主机、端口: bind

#include <sys/types.h> /* See NOTES */ #include <sys/socket.h>

int ret=bind(int sockfd, const struct sockaddr *addr,socklen_t addrlen);

  sockfd=socket 的id

  addr=指向包含地址结构的指针

  addrlen=地址长度

  ret:-1=失败,0=成功.

bind 调用把 一个地址发呢配给 socket. 

3.在socket 上 允许接入呼叫并设置队列长度为1 : 

监听socket上的连接:listen

#include <sys/types.h> /* See NOTES */ #include <sys/socket.h>

int fd=listen(int sockfd, int backlog);

  sockfd=请求接收的socked的id

  backlog=允许接入的数目

  fd: -1=失败, fd =读写的文件描述符

4.等待/接收呼叫: accept

#include <sys/types.h> /* See NOTES */ #include <sys/socket.h>

int fd=accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);

  sockfd=接收呼叫的socket id

  addr=指向呼叫者地址结构的指针

  addrlen=指向呼叫者地址结构长度的指针

  fd: -1=失败,fd=读写的文件描述符

accept 阻塞当前进程,一直到socket 上的接入连接被建立起来.accept 返回文件描述符。

 

5.传输数据:

accept 返回的 fd 是普通文件的描述符,正常操作文件读写。

 

6.关闭连接:close

当一段的进程关闭了该端的 socket ,若另一端的进程在试图读数据的话,它将得到文件结束标记。

 

编写客户端:socket connect read/write close

1.向内核请求建立 socket :建立 Internet 域 AF_INET socket,必须是流 socket SOCK_STREAM

2.与服务器相连 connect

#include <sys/types.h> /* See NOTES */ #include <sys/socket.h>

int ret=connect(int sockfd, const struct sockaddr *addr,socklen_t addrlen);

  sockfd= 建立连接的socket 的id

  addr=指向服务器地址结构的指针

  addrlen=结构的长度

  ret:-1=错误,0=成功

3.正常文件读写 read/write 

4.close 

 

脚本宝典总结

以上是脚本宝典为你收集整理的服务器与Socket操作全部内容,希望文章能够帮你解决服务器与Socket操作所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: