vc++6.0网络编程第一节
2011-05-23 22:00
113 查看
基于TCP(面向连接)的SOCKET编程的服务器端程序的编写流程:
1:创建套接字(socket)
2:将套接字绑定到一个本地地址和端口上(bind)
3:将套接字设置未监听模式,准备接收客户的请求(listen)
4:等待客户请求的到来;当请求到来后,接收连接请求,返回一个新的对应于此此连接的套接字(accept)
5:用返回的套接字和客户端通信(send/recv)
6:返回,等待另一个客户请求
7:关闭套接字
示例程序,注意要添加ws2_32.lib
server.cpp
基于TCP(面向连接)的socket编程的客户端程序的编写流程:
1:创建套接字(socket)
2:向服务器发出连接请求(connect)
3:和服务器端进行通信(send/recv)
4:关闭套接字
示例程序:
client.cpp
1:创建套接字(socket)
2:将套接字绑定到一个本地地址和端口上(bind)
3:将套接字设置未监听模式,准备接收客户的请求(listen)
4:等待客户请求的到来;当请求到来后,接收连接请求,返回一个新的对应于此此连接的套接字(accept)
5:用返回的套接字和客户端通信(send/recv)
6:返回,等待另一个客户请求
7:关闭套接字
示例程序,注意要添加ws2_32.lib
server.cpp
#include<Winsock.h> #include <stdio.h> void main(){ //加载套接字库 WORD wVersionRequested; WSADATA wsaDATA; int err; wVersionRequested=MAKEWORD(1,1); err=WSAStartup(wVersionRequested,&wsaDATA); if(err!=0){ return ; } if(LOBYTE(wsaDATA.wVersion)!=1||HIBYTE(wsaDATA.wVersion)!=1){ WSACleanup(); return; } //创建用于监听的套接字 SOCKET socketSrv=socket(AF_INET,SOCK_STREAM,0); SOCKADDR_IN addrSrv; addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY); addrSrv.sin_family=AF_INET; addrSrv.sin_port=htons(6000); //绑定套接字 bind(socketSrv,(SOCKADDR *)&addrSrv,sizeof(SOCKADDR)); //将套接字设为监听模式,准备接受客户请求 listen(socketSrv,5); SOCKADDR_IN addrClient; int len=sizeof(SOCKADDR); while(1){ //等待客户请求到来 SOCKET sockConn=accept(socketSrv,(SOCKADDR *)&addrClient,&len); char sendBuf[100]; sprintf(sendBuf,"Welcome %s to http://www.ctgu.edu.cn",inet_ntoa(addrClient.sin_addr)); //发送数据 send(sockConn,sendBuf,strlen(sendBuf)+1,0); char recvBuf[100]; //接受数据 recv(sockConn,recvBuf,100,0); //打印接受的数据 printf("%s\n",recvBuf); //关闭套接字 closesocket(sockConn); } }
基于TCP(面向连接)的socket编程的客户端程序的编写流程:
1:创建套接字(socket)
2:向服务器发出连接请求(connect)
3:和服务器端进行通信(send/recv)
4:关闭套接字
示例程序:
client.cpp
#include<Winsock.h> #include <stdio.h> void main(){ //加载套接字库 WORD wVersionRequested; WSADATA wsaDATA; int err; wVersionRequested=MAKEWORD(1,1); err=WSAStartup(wVersionRequested,&wsaDATA); if(err!=0){ return ; } if(LOBYTE(wsaDATA.wVersion)!=1||HIBYTE(wsaDATA.wVersion)!=1){ WSACleanup(); return; } //创建用于监听的套接字 SOCKET socketClient=socket(AF_INET,SOCK_STREAM,0); SOCKADDR_IN addrSrv; addrSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1"); addrSrv.sin_family=AF_INET; addrSrv.sin_port=htons(6000); //向服务器发出连接请求 connect(socketClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR)); //接受数据 char recvBuf[100]; recv(socketClient,recvBuf,100,0); printf("%s\n",recvBuf); //发送数据 send(socketClient,"This is lisi",strlen("This is lisi")+1,0); //关闭套接字 closesocket(socketClient); WSACleanup(); //绑定套接字 // bind(socketSrv,(SOCKADDR *)&addrSrv,sizeof(SOCKADDR)); //将套接字设为监听模式,准备接受客户请求 // listen(socketSrv,5); // SOCKADDR_IN addrClient; // int len=sizeof(SOCKADDR); // while(1){ //等待客户请求到来 // SOCKET sockConn=accept(socketSrv,(SOCKADDR *)&addrClient,&len); // char sendBuf[100]; // sprintf(sendBuf,"Welcome %s to http://www.ctgu.edu.cn",inet_ntoa(addrClient.sin_addr)); //发送数据 // send(sockConn,sendBuf,strlen(sendBuf)+1,0); // char recvBuf[100]; //接受数据 // recv(sockConn,recvBuf,100,0); //打印接受的数据 // printf("%s\n",recvBuf); //关闭套接字 // closesocket(sockConn); // } }
相关文章推荐
- VC++6.0网络编程Socket编程(转)
- 完成端口(CompletionPort)详解 - 手把手教你玩转网络编程系列之三
- 黑马程序员_java 网络编程
- 黑马程序员 网络编程
- Android网络编程(二)HttpClient
- Linux 软件系列之十四——网络编程
- vc++6.0中创建工程时选Win32 Application和Win32 console Application的区别
- socket网络编程一些理解(未涉及代码)
- 黑马程序员-JAVA高级(网络编程)PART2
- Android网络编程Socket
- 第一节 MongoDB介绍及下载与安装
- 7.1 第二块,第一节 objective-c
- 自学asp.net笔记 - 第一节 C#基础简略学习
- vc++6.0 编译时报错 LNK2001 on __beginthreadex and __endthreadex
- vc++6.0中右键点击"转到定义"为什么是"未定义符号"呢?
- 孙鑫视频笔记——网络编程1(基础)
- Perl 网络编程socket练习(一)
- 黑马程序员_学习笔记第23天——网络编程
- [C#网络编程系列]专题一:网络协议简介
- Java 网络编程(下)