c语言socket编程的基本函数,C++ socket编程

发布时间:2023-01-06

本文目录一览:

  1. c语言socket编程read()函数问题
  2. c语言中关于socket函数的例子
  3. 在windows下用C语言如何实现socket网络编程,需要用到哪些头文件或者库?

c语言socket编程read()函数问题

write/read 是用于写入特定文件描述符的底层系统调用。 sendto/recvfrom 适用于使用 UDP(数据包)方式的套接字。 其他函数方面,作者表示自己主要学习 Linux 编程,未查到 sendmsg/recvmsg 这个方法。与 send/recv 的区别是,sendmsg/recvmsg 可以发送 socket 控制信息。 Windows 下的 socket 和 Linux 下的 socket 不同,没有 write/read 函数。sendto/recvfrom 用于 UDP 连接,send/recv 用于 TCP 连接。 作者未找到其他列出的函数,并提供了 API 查询链接供参考。

c语言中关于socket函数的例子

socket() 函数用于建立一个新的 socket,向系统注册并通知系统建立通信端口。 参数 domain 指定使用的地址类型,常见协议如下:

  • PF_UNIX / PF_LOCAL / AF_UNIX / AF_LOCAL:UNIX 进程通信协议
  • PF_INET / AF_INET:IPv4 网络协议
  • PF_INET6 / AF_INET6:IPv6 网络协议
  • PF_IPX / AF_IPX:IPX-Novell 协议
  • PF_NETLINK / AF_NETLINK:核心用户接口装置
  • PF_X25 / AF_X25:ITU-T X.25 / ISO-8208 协议
  • PF_AX25 / AF_AX25:业余无线 AX.25 协议
  • PF_ATMPVC / AF_ATMPVC:存取原始 ATM PVCs
  • PF_APPLETALK / AF_APPLETALK:appletalk (DDP) 协议
  • PF_PACKET / AF_PACKET:初级封包接口 参数 type 的常见值如下:
  1. SOCK_STREAM:提供双向连续且可信赖的数据流,即 TCP。支持 OOB 机制,在所有数据传送前必须使用 connect() 建立连接。
  2. SOCK_DGRAM:使用不连续不可信赖的数据包连接
  3. SOCK_SEQPACKET:提供连续可信赖的数据包连接
  4. SOCK_RAW:提供原始网络协议存取
  5. SOCK_RDM:提供可信赖的数据包连接
  6. SOCK_PACKET:提供与网络驱动程序直接通信 参数 protocol 通常设为 0。 返回值:成功则返回 socket 处理代码,失败返回 -1。 错误代码:
  7. EPROTONOSUPPORT:参数 domain 指定的类型不支持 typeprotocol 指定的协议
  8. ENFILE:核心内存不足,无法建立新的 socket 结构
  9. EMFILE:进程文件表溢出,无法再建立新的 socket
  10. EACCESS:权限不足,无法建立 typeprotocol 指定的协议
  11. ENOBUFS / ENOMEM:内存不足
  12. EINVAL:参数 domain / type / protocol 不合法

在windows下用C语言如何实现socket网络编程,需要用到哪些头文件或者库?

需要用到的头文件:

#include <winsock2.h>
#include <windows.h>

与 Linux 环境下 socket 编程相比,Windows 环境多了一个步骤:启动或初始化 Winsock 库。 Winsock 是一种标准 API,用于两个或多个应用程序之间通过网络进行数据通信。它有两个版本:

Winsock 1

  • 支持 Windows CE 平台
  • 头文件:WinSock.h
  • 库:wsock32.lib

Winsock 2

  • 部分平台如 Windows CE 不支持
  • 通过前缀 WSA 可以区别于 Winsock 1 版本
  • 头文件:WinSock2.h
  • 库:ws2_32.lib mswsock.h 用于编程扩展,使用时必须链接 mswsock.dll

Winsock 库的加载与卸载

加载

int WSAStartup(WORD wVersionRequested, LPWSADATA lpWSAData);

加载成功返回值为 0。

  • wVersionRequested:加载的 Winsock 版本,使用宏 MAKEWORD(x, y),例如 MAKEWORD(2, 2)
  • lpWSAData:指向 WSADATA 结构的指针,系统会填充版本信息。

卸载

int WSACleanup(void);

卸载函数较为简单。