vc socket通信实例总结由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“csocket通信实例”。
VC++ socket通信实例 总结
1.两天计算机通信需要协议,通信的两台计算机IP必须唯一
2.同一个计算机可以进行多个应用程序与其他计算机通信,IP地址唯一,而端口号是区别同一计算机(同一IP)的唯一标示。
3.实际上就类似于一个办公室的总机号码(IP)和分机号码(端口号)
4.协议:为了进行网络中的数据交换(通信)而建立的规则、标准或约定
5.协议=语义+语法+规则 6.不同层具有各自不同的协议
7.上层使用下层提供的服务,实际通信在最底层完成8.对等层实体之间虚拟通信| 9.TCP:面向连接的可靠的传输协议 10.UDP:面向无连接的不可靠的传输协议
11.端口是一种抽象的软件结构。应用程序通过系统调用与某端口建立连接后,传输层传给端口的数据都被响应的进行所接收,相应进程发给传输层的数据都通过该端口输出。12.端口用一个整数型标示符来表示。端口号跟协议相关,TCP/IP传输层的两个协议TCP和UDP是完全独立的两个软件模块,因此各自的端口号也相互独立。13.端口使用一个16位的数字来表示,它的范围是0~65535,1024以下的端口号保留给预定义的服务。例如:http使用的是80端口。
14.socket(套接字):windows sockets只支持一个通信区域:网际域(AF_INET),这个域被使用网际协议簇通信的进程使用。
15.C/S模式:客户机向服务器提出请求,服务器接收到请求后,提供相应的服务。16.套接字的类型
a)
流式套接字:(SOCK_STREAM):面向连接可靠的数据传输服务,按顺序接收
b)
数据包式套接字:(SOCK_DGRAM):无连接服务。接收顺序混乱。
c)
原始套接字(SOCK_RAM)17.基于TCP(面向连接)的socket编程 a)
服务器端程序:
i.创建套接字socket
ii.将套接字绑定到一个本地地址和端口上bind
iii.将套接字设为监听模式,准备接收客户请求listen
iv.等待客户请求到了;当请求到来后,接收连接请求,返回一个新的对应于此次连接的套接字accept
v.和客户端进行通信rend/recv
vi.户请求
vii.b)
客户端程序:
i.socket
ii.接请求connect
iii.通信rend/recv
iv.18.基于UDP的socket编程 a)
服务器端(接收端)程序:
i.socket
用返回的套接字 返回,等待另一客关闭套接字
创建套接字
向服务端发出连
和服务器端进行 关闭套接字
创建套接字
ii.将套接字绑定到一个本地地址和端口上bind
iii.等待接收数据recv/from
iv.关闭套接字 b)
客户端(发送端)程序:
i.创建套接字socket
ii.向服务器发送数据sendto
iii.关闭套接字 19.int WSAStartup(WORD wVersionRequested, //打算使用的最高winsock版本号
LPWSADATA lpWSAData //是个结构体,接收socket的详细信息);20.alt+F8:格式化代码 21.面向TCP的连接,服务器端
a)
套接字SOCKET socket(int af,//指定地址簇
int type,//socket类型
int protocol //协议);b)
绑定int bind(SOCKET s,//要绑定的套接字
const struct sockaddr FAR* name, //指定了该套接字的本地地址信息
int namelen
//该地址结构的长度);struct sockaddr {
u_short
sa_family;
char
sa_data[14];};c)
监听int listen(SOCKET s,int backlog);d)
接受连接SOCKET accept(SOCKET s,struct sockaddr FAR* addr,int FAR* addrlen);e)
发送int send(SOCKET s,//建立连接的socket const char FAR * buf, //发送的数据
int len,//发送数据的长度
int flags);f)
接收int recv(SOCKET s,char FAR* buf,int len,int flags);g)
需要的文件#include 需要连接一个动态链接库:ws2_32.lib 22.服务器端: a)
Socket b)
连接:connect int connect(SOCKET s,const struct sockaddr FAR* name,int namelen);c)
接收:recv d)
发送:send e)
关闭:closesocket
Tcp服务端程序:=========#include
#include
voidmain()
{
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 sockSrv=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(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
listen(sockSrv,5);
SOCKADDR_IN addrClient;
int len=sizeof(SOCKADDR);
while(1)
{
SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);
char sendBuf[100];
sprintf(sendBuf,“Welcome %s to 刘洼村”,inet_ntoa(addrClient.sin_addr));
send(sockConn,sendBuf,strlen(sendBuf)+1,0);
char recvBuf[100];
recv(sockConn,recvBuf,100,0);
printf(“%sn”,recvBuf);
closesocket(sockConn);
}
} 24.Tcp客户端程序:[cpp] view plaincopy#include
#include
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 sockClient=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(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
char recvBuf[100];
recv(sockClient,recvBuf,100,0);
printf(“%sn”,recvBuf);
send(sockClient,“This is 刘洼村”,strlen(“This is 刘洼村”)+1,0);
closesocket(sockClient);
WSACleanup();}
25.运行之后,开启了6个客户端,一个服务器端。程序运行效果:
26.面向UDP的连接 27.服务器:socket a)
bind b)
接收数据:int recvfrom(SOCKET s,//套接字
char FAR* buf,//接收数据
int len,//长度
int flags,//会影响调用行为,0 struct sockaddr FAR* from, //接收发送方的地址信息
int FAR* fromlen
//接收长度);c)
关闭closesocket d)
Cleanup 28.UDP服务器端程序:[cpp] view plaincopy#include
#include
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 sockSrv=socket(AF_INET,SOCK_DGRAM,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(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
SOCKADDR_IN addrClient;
int len=sizeof(SOCKADDR);
char recvBuf[100];
recvfrom(sockSrv,recvBuf,100,0,(SOCKADDR*)&addrClient,&len);
printf(“%sn”,recvBuf);
closesocket(sockSrv);
WSACleanup();
} 28.UDP客户端: a)
socket定义
b)
发送:
int sendto(SOCKET s,const char FAR * buf,int len,int flags,const struct sockaddr FAR * to,int tolen);29.UDP客户端程序[cpp] view plaincopy#include
#include
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 sockClient=socket(AF_INET,SOCK_DGRAM,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);
sendto(sockClient,“Hello 刘洼村”,strlen(“Hello 刘洼村”)+1,0,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
closesocket(sockClient);
WSACleanup();} 运行结果:
30.注意:每个程序都要加上ws2_32.lib链接库。如下添加:
By 刘洼村
北京交通大学 电子信息工程学院实习报告班级:学号:学生姓名:带队教师:实习时间:年 实习地点:唐山广播电视台一、实习目的1、通过对唐山广播电视台的实时实地的亲身实习,我学习了解......
SEO实例总结1、网站虚拟主机的IP是否稳定,网站的网址是否曾经被注册甚至被搜索引擎惩罚。同一IP下的其他网站是否有作弊嫌疑或者被搜索引擎处罚!如果一旦被搜索引擎认定与其IP......
现代通信总结通信:是实现信息传递功能的一门科学技术 ,是利用电子等技术手段,借助电信号(含光信号)实现从一地向另一地进行信息传递和交换的过程。信道作用:传递信息的通道及传递......
第九周总结2个月了,自己到欧康已经2个月了,2个月的时间虽然不算很长,但也可以考验出一个人的耐力,同时培训的佛山的一个同事已经辞职了,可能是不习惯这种不稳定的工作,抑或是其他......
公路通信总结【一】高速公路通信系统 1.通信:是消息的相互传递,现代通信泛指电通信。 2.通信系统一般模型 信源是消息的产生地,其作用是把各种消息转换成原始电信号。发送设备......