本文目录一览:
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 PVCsPF_APPLETALK
/AF_APPLETALK
:appletalk (DDP) 协议PF_PACKET
/AF_PACKET
:初级封包接口 参数type
的常见值如下:
SOCK_STREAM
:提供双向连续且可信赖的数据流,即 TCP。支持 OOB 机制,在所有数据传送前必须使用connect()
建立连接。SOCK_DGRAM
:使用不连续不可信赖的数据包连接SOCK_SEQPACKET
:提供连续可信赖的数据包连接SOCK_RAW
:提供原始网络协议存取SOCK_RDM
:提供可信赖的数据包连接SOCK_PACKET
:提供与网络驱动程序直接通信 参数protocol
通常设为 0。 返回值:成功则返回 socket 处理代码,失败返回 -1。 错误代码:EPROTONOSUPPORT
:参数domain
指定的类型不支持type
或protocol
指定的协议ENFILE
:核心内存不足,无法建立新的 socket 结构EMFILE
:进程文件表溢出,无法再建立新的 socketEACCESS
:权限不足,无法建立type
或protocol
指定的协议ENOBUFS
/ENOMEM
:内存不足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);
卸载函数较为简单。