c语言socket(C语言socket编程怎么实现2个客户端之间通信)

本文目录
C语言socket编程怎么实现2个客户端之间通信
两个单独的客户端是没法通信的,必须经过服务器。
服务器和客户端连接过程如下:
客户端:
socket--》connect--》read/write
服务器:
socket--》bind--》listen--》accept--》write/read
若要通讯必须要有服务器,只有在connect和accept建立好连接之后才能真正的通信。
如果你是问编程的流程或者上述函数的意义和用法百度上一大堆。
c语言socket文件传输问题
服务器端(发送文件):首先打开文件【fopen】,用rb方式打开,既可以发送文本文件,也可以发送二进制文件,在无错时初始化套接字socket,即初始化socket库【WSAStartup】,分配socket【socket】,填充服务器的地址,即填充sockaddr_in结构,然后进行绑定【bind】,设置套接字为监听套接字【listen】,接收连接【accept】,至此服务器阻塞,等待客户端的连接。
客户端(接收文件):首先打开文件【fopen】,用wb方式打开,在无错时初始化套接字socket,即初始化socket库【WSAStartup】,分配socket【socket】,填充客户端的地址,即填充sockaddr_in结构,然后进行绑定【bind】,再填充服务器的地址结构,然后调用【connect】进行连接,当连接成功后,第一阶段的工作便结束了。
第二阶段,发送文件。
服务器端:使用循环while,结束条件是(!feof(fp)),fp是文件指针,feof检测当前的文件读取指针是否到达文件尾部,若到达了就返回真,否则返回假。然后在循环内部依次调用【fread】、【send】进行发送。这里有一个问题需要注意,调用fread的时候有两个参数是要每次读多少字节和读多少次,将第一个设置为1,将第二个设置为缓冲区的大小,用一个变量记录实际读到多少字节,即【fread】的返回值,然后将其传递给【send】,就可以实现发送文件了,在发送完成后断开连接【closesocket】,关闭文件【fclose】。
客户端:使用while死循环,调用【recv】接收文件,【fwrite】写入文件,这里也有个和上面类似的问题,就是要将recv的返回值传递给fwrite的第三个参数,即受到了多少字节,就向文件中写多少字节。当recv返回值为0时(连接断开时)退出循环,【closesocket】关闭套接字,调用【fclose】关闭文件。
C语言Socket服务器怎么给客户端发消息
socket
服务器给指定的客户端发消息该怎么处理(tcp)(c语言)
多个客户端之间进行通讯,通过服务器转发的形式,现在客户端1请求向客户端2发送消息,先把消息发送到服务器,服务器怎么才能把消息转发到客户端2而不是转发给客户端3或者他自己。
c语言中关于socket函数的例子
函数说明:socket()用来建立一个新的socket, 也就是向系统注册, 通知系统建立一通信端口. 参数domain 指定使用何种的地址类型, 完整的定义在/usr/include/bits/socket.h 内, 底下是常见的协议:
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 用来指定socket 所使用的传输协议编号, 通常此参考不用管它, 设为0 即可.
返回值:成功则返回socket 处理代码, 失败返回-1.
错误代码:
1、EPROTONOSUPPORT 参数domain 指定的类型不支持参数type 或protocol 指定的协议
2、ENFILE 核心内存不足, 无法建立新的socket 结构
3、EMFILE 进程文件表溢出, 无法再建立新的socket
4、EACCESS 权限不足, 无法建立type 或protocol 指定的协议
5、ENOBUFS/ENOMEM 内存不足
6、EINVAL 参数domain/type/protocol 不合法

更多文章:
windows程序设计第五版(《WINDOWS程序设计》和《WINDOWS核心编程》的区别)
2026年10月15日 11:30
issued retroactively(FORM E上盖“ISSUED RETROACTIVELY”的问题,小女在线等待)
2026年10月15日 10:30
begin和start的区别(start与begin的区别)
2026年10月15日 09:20
vant官网中文(范特365 是韩国化妆品VANT36.5吗)
2026年10月15日 09:10
prison break(越狱(prison break)到底是在讲个什么)
2026年10月15日 06:50
c程序设计第五版教学视频(求C程序设计(第五版)谭浩强教材源代码、视频课件等电子版资料!谢谢大家!)
2026年10月15日 06:40





