网络编程基本流程:
1:Socket概念及原型函数
原义是“孔”或“插座”。作为BSD UNIX的进程通信机制。通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄。在Internet上的主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务。
函数原型:
int socket(int
domain, int
type, int
protocol);
参数说明:
domain:协议域,又称协议族(family)。常用的协议族有AF_INET、AF_INET6、AF_LOCAL(或称AF_UNIX,Unix域Socket)、AF_ROUTE等。协议族决定了socket的地址类型,在通信中必须采用对应的地址,如AF_INET决定了要用ipv4地址(32位的)与端口号(16位的)的组合、AF_UNIX决定了要用一个绝对路径名作为地址。
type:指定Socket类型。常用的socket类型有SOCK_STREAM、SOCK_DGRAM、SOCK_RAW、SOCK_PACKET、SOCK_SEQPACKET等。流式Socket(SOCK_STREAM)是一种面向连接的Socket,针对于面向连接的TCP服务应用。数据报式Socket(SOCK_DGRAM)是一种无连接的Socket,对应于无连接的
UDP服务应用。
protocol:指定协议。常用协议有IPPROTO_TCP、IPPROTO_UDP、IPPROTO_SCTP、IPPROTO_TIPC等,分别对应TCP传输协议、UDP传输协议、STCP传输协议、TIPC传输协议。
注意:type和protocol不可以随意组合,如SOCK_STREAM不可以跟IPPROTO_UDP组合。当第三个参数为0时,会自动选择第二个参数类型对应的默认协议。
返回值:
如果调用成功就返回新创建的
套接字的描述符,如果失败就返回INVALID_SOCKET(Linux下失败返回-1)。
套接字描述符是一个整数类型的值。每个进程的进程空间里都有一个
套接字描述符表,该表中存放着套接字描述符和套接字
数据结构的对应关系。该表中有一个字段存放新创建的
套接字的描述符,另一个字段存放套接字
数据结构的
地址,因此根据套接字描述符就可以找到其对应的套接字数据结构。每个进程在自己的进程空间里都有一个
套接字描述符表但是套接字数据结构都是在
操作系统的
内核缓冲里。
2:BIND(绑定)
函数原型:
int bind(SOCKET
socket, const struct sockaddr*
address, socklen_t
address_len);
参数说明:
socket
:是一个
套接字描述符
。
address:是一个sockaddr结构指针,该结构中包含了要结合
本机的地址和端口号。
address_len:确定address
缓冲区的长度。
返回值:
如果函数执行成功,返回值为0,否则为SOCKET_ERROR。
3:整个客户端和服务器端交互图
4:Accept方法
5:C#中一个简单的实例
服务器端:
【1】:linux编程大全 地址:http://oss.org.cn/ossdocs/gnu/linux/
【2】:百度百科、
【3】:C#网络编程,作者:马俊