首页 理论教育Socket通信实现:走进下一代计算机网络技术

Socket通信实现:走进下一代计算机网络技术

【摘要】:在Windows编写网络应程序,基本上都是利用Socket套接字进行数据通信,分为服务器端套接字和客户端套接字两个设计部分。连接建立后,服务器端创建一个通信用的Socket,接着服务器端就可以通过recv()和send()来接收和发送数据。最后,待数据传送结束后,调用close()关闭Socket。

在Windows编写网络应程序,基本上都是利用Socket套接字进行数据通信,分为服务器端套接字和客户端套接字两个设计部分。

1.服务器端程序

服务器端首先启动,通过调用socket()建立一个Socket,然后调用bind()将该Socket和本地网络地址联系在一起,再调用listen()使Socket做好侦听的准备,并规定它的请求队列的长度,之后就调用accept()来接收连接。连接建立后,服务器端创建一个通信用的Socket,接着服务器端就可以通过recv()和send()来接收和发送数据。最后,待数据传送结束后,调用close()关闭Socket。

(1)创建服务器端套接字:

memset(& hints,0,sizeof(hints));

hints.ai_family=AF_INET6;//指定用IPV6协议

hints.ai_socktype=SOCK_STREAM;//指定用字节流

hints.ai_protocol=IPPRO TO_TCP;//指定用TCP协议

hints.ai_flags=AI_NUMERICHOST;//IP用数字表示

rc=getaddrinfo(“::1”,“5001”,& hints,& res);//解析本机地址

s_send=socket(res->ai_family,res->ai_socktype,res->ai_protocol);

//创建socket

(2)绑定本机监听端口:

rc=bind(s_send,res->ai_addr,res->ai_addrlen);

(3)监听并接受连接:

listen(s_send,5);//创建连接队列,开始监听

new_fd=accept(s_send,(struct sockaddr*)& sin,& sin_len);//接受一个连接

(4)接收数据:

recv(new_fd,buf,sizeof(buf),0);//接受数据到buf

printf(“recv:%s”,buf);//打印接受的数据(www.chuimin.cn)

(5)关闭套接字:

close(s_send);

2.客户端程序设计

客户端创建一个Socket,并调用connect()和服务器建立连接。连接建立后,客户端就可以通过recv()和send()来接收和发送数据。最后,待数据传送结束后,调用close()关闭Socket。

(1)创建客户端套接字:

memset(& hints,0,sizeof(hints));

hints.ai_family=AF_INET6;//指定用IPV6协议

hints.ai_socktype=SOCK_STREAM;//指定用字节流

hints.ai_protocol=IPPROTO_TCP;//指定用TCP协议

hints.ai_flags=AI_NUMERICHOST;//IP用数字表示

rc=getaddrinfo(“3ffe:3211::1”,“5001”,& hints,& res);//解析服务器地址

s_send=socket(res->ai_family,res->ai_socktype,res->ai_protocol);//创建socket

(2)连接服务器:

connect(s_send,res->ai_addr,res->ai_addrlen);

(3)发送数据:

send(s_send,buf,sizeof(buf),0);

(4)关闭套接字:

close(s_send);