Unix BSD Socket编程Xcode实践
来源:互联网 发布:微信js sdk 编辑:程序博客网 时间:2024/06/05 18:37
什么是Socket?
Socket 是进行程序间通讯(IPC(Inter-Process Communication,进程间通信) )的 BSD (Unix 的一个分支的衍生)方法。网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。建立网络通信连接至少要一对端口号(socket)。socket本质是编程接口(API),基于TCP/IP的实现。Socket的英文原义是“孔”或“插座”。作为BSD UNIX的进程通信机制,取后一种意思。通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之间的通信。在Internet上的主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务。
BSD socket API 简介
BSD socket API 和 winsock API 接口大体差不多,下面将列出比较常用的 API:
API接口讲解int socket(int addressFamily, int type,
int protocol)
int close(int socketFileDescriptor)
int bind(int socketFileDescriptor,sockaddr *addressToBind,int addressStructLength)
将 socket 与特定主机地址与端口号绑定,成功绑定返回0,失败返回 -1。
int accept(int socketFileDescriptor,sockaddr *clientAddress, intclientAddressStructLength)
接受客户端连接请求并将客户端的网络地址信息保存到 clientAddress 中。
当客户端连接请求被服务器接受之后,客户端和服务器之间的链路就建立好了,两者就可以通信了。
int connect(int socketFileDescriptor,sockaddr *serverAddress, intserverAddressLength)
客户端向特定网络地址的服务器发送连接请求,连接成功返回0,失败返回 -1。
当服务器建立好之后,客户端通过调用该接口向服务器发起建立连接请求。对于 UDP 来说,该接口是可选的,如果调用了该接口,表明设置了该 UDP socket 默认的网络地址。对 TCP socket来说这就是传说中三次握手建立连接发生的地方。
注意:该接口调用会阻塞当前线程,直到服务器返回。
hostent* gethostbyname(char *hostname)使用 DNS 查找特定主机名字对应的 IP 地址。如果找不到对应的 IP 地址则返回 NULL。
int send(int socketFileDescriptor, char*buffer, int bufferLength, int flags)
通过 socket 发送数据,发送成功返回成功发送的字节数,否则返回 -1。
一旦连接建立好之后,就可以通过 send/receive 接口发送或接收数据了。注意调用 connect 设置了默认网络地址的 UDP socket 也可以调用该接口来接收数据。
int receive(int socketFileDescriptor,char *buffer, int bufferLength, int flags)
从 socket 中读取数据,读取成功返回成功读取的字节数,否则返回 -1。
一旦连接建立好之后,就可以通过 send/receive 接口发送或接收数据了。注意调用 connect 设置了默认网络地址的 UDP socket 也可以调用该接口来发送数据。
int sendto(int socketFileDescriptor,char *buffer, int bufferLength, intflags, sockaddr *destinationAddress, intdestinationAddressLength)
通过UDP socket 发送数据到特定的网络地址,发送成功返回成功发送的字节数,否则返回 -1。
由于 UDP 可以向多个网络地址发送数据,所以可以指定特定网络地址,以向其发送数据。
int recvfrom(int socketFileDescriptor,char *buffer, int bufferLength, intflags, sockaddr *fromAddress, int*fromAddressLength)
从UDP socket 中读取数据,并保存发送者的网络地址信息,读取成功返回成功读取的字节数,否则返回 -1 。
由于 UDP 可以接收来自多个网络地址的数据,所以需要提供额外的参数,以保存该数据的发送者身份。
http://www.cnblogs.com/QianChia/p/6391789.html
demo地址:https://github.com/KillWilde/LANTalk.git
- Unix BSD Socket编程Xcode实践
- iOS BSD socket编程
- BSD socket编程
- Socket编程实践(13) --UNIX域协议
- Socket编程实践(13) --UNIX域协议
- iOS BSD Socket UDP编程
- iOS BSD Socket TCP编程
- iPhone socket 编程之BSD Socket篇
- iPhone socket 编程之BSD Socket篇
- iPhone socket 编程之BSD Socket篇
- UNIX网络编程——Socket通信原理和实践
- unix/linux编程实践教程:服务器与socket
- 【Unix/Linux编程实践】编写时间服务器(使用Socket)
- 【linux 编程】BSD Socket 简易入门手册
- 【linux 编程】BSD Socket 简易入门手册
- IOS 网络编程之BSD Socket
- iOS网络编程之BSD Socket
- BSD socket
- eclipse从Git获取项目更新
- python实现str时间和系统时间的比较
- FileInputStream介绍和对文件操作的具体用法
- android音频系统之AudioTrack的使用
- Catch That Cow (BFS)
- Unix BSD Socket编程Xcode实践
- 斐波那契数列
- [HDU]-6034 Balala Power!
- ELK搭建实时日志分析平台
- JDK源码分析——TimSort
- [HAOI2008]圆上的整点
- c++中虚基类表和虚函数表的布局
- PHP实现采集抓取淘宝网单个商品信息
- 快速排序非递归版(利用键值对)