VC实现最简单的UDP通信

合集下载

C++udp通信

C++udp通信
//如果你的计算机没有联网,直接使用127.0.0.1即可
addr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
//发送数据
char szText[] = " TCP Server Demo! \r\n";
::sendto(s, szText, strlen(szText), 0, (sockaddr*)&addr, sizeof(addr));
turn 0;
}
//也可以在这里调用bind函数绑定一个本地地址
//否则系统将会自动安排
//填写远程地址信息
sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_port = htons(4567);
//注意,这里要填写服务器程序所在机器的IP地址
{
exit(0);
}
}
~CInitSock()
{
::WSACleanup();
}
};
//////////////////////////////////////////////////////////
// UDPClient文件
#include "../common/InitSock.h"
#include <stdio.h>
return 0;
}
//填充sockaddr_in结构
sockaddr_in sin;
sin.sin_family = AF_INET;
sin.sin_port = htons(4567);
sin.sin_addr.S_un.S_addr = INADDR_ANY;

UDP通信程序调试报告

UDP通信程序调试报告

UDP 通信实验调试报告一、调试内容:使用VC6.0作为开发平台,采用C语言编写udp程序,实现两台PC机通过以太网口传输数据。

两台PC机,一台运行开发程序,一台运行通信调试用端口精灵WizPort以太网口监视器作为程序调试辅助工具。

二、程序流程使用UDP通信程序运行步骤:①预先设置本机和目标机的IP地址和端口号②创建本机上的套接字socket③将套接字与本机的IP地址和端口号绑定④检测套接字设备文件的读写状态,接收和发送数据三、程序代码简析用Compaq Visual Fortran 6编译器可以调试程序#include <windows.h>#include <stdio.h>#include <conio.h>#include <string.h>#include <time.h>#include <errno.h>#include <stdlib.h>#include <sys/types.h>#include <winsock.h>#include <mmsystem.h>#include "nser.h"Udp应用程序除了涉及到一般的C语言库函数,还涉及到window功能调用,套接字函数调用,所以在VC开发平台默认的工程连接库中加入ws2_32.lib。

该库对应ws2_32.dll,提供了网络相关API的支持,若使用其中的API,则应该将ws2_32.lib加入工程。

在工程-->设置-->连接选项卡下的工程选项中输入ws2_32.lib(如上图)。

"nser.h"中定义了一些常用宏。

#define NTD_IPADDR "10.1.19.198"//ntd的ip地址#define NTD_PORT 3006 //nt的端口号#define LOCAL_IPADDR "10.1.19.199"//源端的ip地址#define LOCAL_PORT 3007 //源端的端口号以上定义了目标PC机和本地PC机的的IP地址和端口号。

c语言udp编程

c语言udp编程

c语言udp编程摘要:1.UDP 简介2.C 语言UDP 编程基础3.UDP 数据报结构4.UDP 发送和接收函数5.UDP 编程实例正文:【1.UDP 简介】UDP(User Datagram Protocol,用户数据报协议)是一种无连接的、不可靠的数据传输协议。

与TCP 协议相比,UDP 不建立连接,不保证数据包的可靠传输,但传输速度快,开销小。

因此,UDP 适用于那些对传输速度要求较高,能容忍部分丢包的数据传输场景,例如实时音视频传输。

【2.C 语言UDP 编程基础】在C 语言中,我们可以使用socket 库进行UDP 编程。

首先,需要包含相应的头文件:```c#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <arpa/inet.h>#include <sys/socket.h>```然后,需要使用`socket`函数创建一个UDP 套接字:```cint sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);```其中,`AF_INET`表示使用IPv4 协议,`SOCK_DGRAM`表示UDP 套接字,`IPPROTO_UDP`表示UDP 协议。

【3.UDP 数据报结构】在C 语言中,UDP 数据报使用`struct sockaddr_in`结构表示。

这个结构包含了源IP 地址、目标IP 地址、源端口和目标端口等信息。

具体定义如下:```cstruct sockaddr_in {int8_t alen; // 地址长度,通常为4 字节int8_t s_addr; // 源IP 地址(网络字节序)int16_t s_port; // 源端口,网络字节序};```【4.UDP 发送和接收函数】发送UDP 数据包时,可以使用`sendto`函数:```cint sendto(int sock, const void *buf, int len, const struct sockaddr *addr);```接收UDP 数据包时,可以使用`recvfrom`函数:```cint recvfrom(int sock, void *buf, int len, struct sockaddr *addr, int *alen);```【5.UDP 编程实例】以下是一个简单的C 语言UDP 编程实例,实现了一个简单的客户端和服务器:服务器端代码:```cint main() {int sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);struct sockaddr_in addr;addr.alen = sizeof(addr);addr.s_addr = htonl(INADDR_ANY);addr.s_port = htons(8888);bind(sock, (struct sockaddr *)&addr, sizeof(addr));while (1) {char buf[1024];int len = recvfrom(sock, buf, sizeof(buf), NULL, NULL);printf("收到消息:%s", buf);}return 0;}```客户端代码:```cint main() {int sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);struct sockaddr_in addr;addr.alen = sizeof(addr);addr.s_addr = inet_addr("127.0.0.1");addr.s_port = htons(8888);while (1) {char buf[1024] = "Hello, UDP!";sendto(sock, buf, sizeof(buf), (struct sockaddr *)&addr, sizeof(addr));}return 0;}```分别编译并运行服务器端和客户端代码,可以看到服务器端能接收到客户端发送的消息。

UDP通讯 实验报告

UDP通讯  实验报告

物理与电子工程学院《嵌入式系统设计》设计性实验报告题目UDP通讯实验系别物电学院电子信息工程年级2009 专业电子信息工程班级Y091 学号Y10109139学生姓名吴晓婷指导教师浦炜实验时间2012/10/9目录课题要求 (2)1.本课题的目的 (2)2.运行环境 (2)正文 (2)一.课题分析 (2)二.系统设计 (3)三.技术实现问题 (6)四.总结与体会 (7)设计性实验报告成绩:指导教师签名: (7)课题要求1.本课题的目的学习UDP 通讯原理并掌握Socket编程方法。

编程实现嵌入式开发平台和计算机之间的UDP 通讯。

通过触摸屏进行画图,使其在液晶屏上显示,同时通过网络传输数据,使其在计算机屏幕上显示;由计算机控制清除液晶屏上的图形。

在此基础上,通过小键盘控制在触摸屏上绘制的图形,如按键后控制绘矩形或圆形等,通过双击清屏等功能。

2.运行环境硬件:ARM 嵌入式开发板、ARM7TDMI 的JTAG 仿真器、PC 机Pentium100 以上。

软件:PC 机操作系统win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成开发环境、仿真器驱动程序、超级终端通讯程序正文一.课题分析1.UDP 协议简介UDP 协议即用户数据报协议(User Datagram Protocol),它与我们所熟知的TCP(传输控制协议)协议一样,UDP协议直接位于IP(网际协议)协议的顶层。

根据OSI(开放系统互连)参考模型,UDP 和TCP 都属于传输层协议。

UDP 协议的主要作用是将网络数据流压缩成数据报的形式。

一个典型的数据报就是一个二进制数据的传输单位。

每一个数据报的前8 个字节用来包含报头信息,剩余字节则用来包含具体的传输数据。

UDP 报头由4 个域组成,其中每个域各占用2 个字节。

UDP 协议使用端口号为不同的应用保留其各自的数据传输通道。

UDP协议正是采用这一机制实现对同一时刻内多项应用同时发送和接收数据的支持。

Windows下C语言的Socket编程例子(TCP和UDP)

Windows下C语言的Socket编程例子(TCP和UDP)

Windows下C语言的Socket编程例子(TCP和UDP)sockets(套接字)编程有三种,流式套接字(SOCK_STREAM),数据报套接字(SOCK_DGRAM),原始套接字(SOCK_RAW);基于TCP的socket编程是采用的流式套接字。

在这个程序中,将两个工程添加到一个工作区。

要链接一个ws2_32.lib的库文件。

服务器端编程的步骤:1:加载套接字库,创建套接字(WSAStartup()/socket());2:绑定套接字到一个IP地址和一个端口上(bind());3:将套接字设置为监听模式等待连接请求(listen());4:请求到来后,接受连接请求,返回一个新的对应于此次连接的套接字(accept());5:用返回的套接字和客户端进行通信(send()/recv());6:返回,等待另一连接请求;7:关闭套接字,关闭加载的套接字库(closesocket()/WSACleanup())。

客户端编程的步骤:1:加载套接字库,创建套接字(WSAStartup()/socket());2:向服务器发出连接请求(connect());3:和服务器端进行通信(send()/recv());4:关闭套接字,关闭加载的套接字库(closesocket()/WSACleanup())。

函数介绍:1.#include<sys/socket.h>int socket (int family, int type, int protocol);返回值,成功为非负整数,成为套接口描数字;出错为-1、family参数:AF_INET --ipv4;AF_INET6--ipv6;AF_LOCAL--unix域协议;AF_ROUTE--路由socket;AF_KEY--密钥socket;type参数:SOCK_STREAM--字节流套接口SOCK_DGRAM--数据报套接口SOCK_RAM--原始套接口protocal参数一般置为0,当type为SOCK_RAM时不同2.#include<sys/socket.h>int connect (int sockfd, const struct sockaddr* servaddr, socklen_t addlen);返回值,0-成功;-1-出错;servaddr参数可以为sockaddr_in和sockaddr_in6类型,但是都必须强制转化为sockaddr指针类型;connect函数的出错处理:(1)ETIMEOUT-connection timed out 目的主机不存在,没有返回任何相应,例如主机关闭(2)ECONNREFUSED-connection refused(硬错)到达目的主机后,由于各种原因建立不了连接,主机返回RST(复位)响应,例如主机监听进程未启用,tcp取消连接等(3)EHOSTTUNREACH-no route to host(软错)路由上引发了一个目的地不可达的ICMP错误其中(1)(3),客户端会进行定时多次重试,一定次数后才返回错误。

C# TcpUdp使用详解

C# TcpUdp使用详解

TcpClient BeginConnect
开始一个对远程主机连接的异步请求
EndConnect
异步接受传入的连接尝试
Socket BeginReceive
开始从连接的 Socket 中异步接收数据
EndReceive
结束挂起的异步读取
BeginSend
将数据异步发送到连接的 Socket
EndSend
3.TcpClient tcpClient = new TcpClient(IPEndPoint iep);参数 iep 指定本机(客户 端)IP 地址很端口号。当客户端存在一个以上的 IP 地址。 IPAddress[] address = Dns.GetHostAddresses(Dns.GetHostName()); IPEndPort iep = new IPEndPoint(address[0],51888); TcpClient tcpClient = new TcpClient(); tcpClient.Connect("",51888); 4.TcpClient(string hostname,int port);hostname:连接的远程主机的 DNS 名,port 表示要连接到的远程主机的端口号。 TcpClient tcpClient = new TcpClient("",51888); TcpClient 类的常用属性:
if(needExit) break;
Thread.Sleep(50); } 3.使用 EndInvoke 结束异步调用: private struct SendMessageStates{
public SendMessageDelegate d; public IAsyncResult result; } private void AsyncSendMessage(string message) { SendMessageDelegate d = new SendMessageDelegate(SendMessage); IAsyncResult result = d.BeginInvoke(message,null,null); while(result.IsCompleted == false) {

C语言socket编程----实现UDP通信

C语言socket编程----实现UDP通信

C语⾔socket编程----实现UDP通信TCP/IP协议叫做传输控制/⽹际协议,⼜叫做⽹络通信协议。

实际上,它包括上百个功能的协议。

套接字(socket):在⽹络中⽤来描述计算机中不同程序与其他计算程序的通信⽅式。

套接字分为三类;流式socket(SOCK_STREAM):提供可靠,⾯向连接的通信流;它使⽤TCP协议,从⽽保证了数据传输的正确性和顺序性。

数据报socket(SOCK_DGRAM):数据报套接字定义了⼀种⽆连接的服务,数据通过相互独⽴的报⽂进⾏传输,⽆序的,并且不保证可靠,⽆差错的。

它使⽤的数据报协议是UDP。

原始socket:原始套接字允许对底层协议如TP或ICMP进⾏直接访问,它功能强⼤但使⽤复杂,主要⽤于⼀些协议的开发。

下⾯是UDP通信的demo://socket udp 服务端1 #include<stdio.h>2 #include<unistd.h>3 #include<sys/types.h>4 #include<sys/socket.h>5 #include<arpa/inet.h>67int main()8 {9//创建socket对象10int sockfd=socket(AF_INET,SOCK_DGRAM,0);1112//创建⽹络通信对象13struct sockaddr_in addr;14 addr.sin_family =AF_INET;15 addr.sin_port =htons(1324);16 addr.sin_addr.s_addr=inet_addr("127.0.0.1");1718//绑定socket对象与通信链接19int ret =bind(sockfd,(struct sockaddr*)&addr,sizeof(addr));20if(0>ret)21 {22 printf("bind\n");23return -1;2425 }26struct sockaddr_in cli;27 socklen_t len=sizeof(cli);2829while(1)30 {31char buf =0;32 recvfrom(sockfd,&buf,sizeof(buf),0,(struct sockaddr*)&cli,&len);33 printf("recv num =%hhd\n",buf);3435 buf =66;36 sendto(sockfd,&buf,sizeof(buf),0,(struct sockaddr*)&cli,len);3738 }39 close(sockfd);4041 }//socket udp 客户端1 #include<stdio.h>2 #include<sys/types.h>3 #include<sys/socket.h>4 #include<unistd.h>5 #include<arpa/inet.h>67int main()8 {9//创建socket对象10int sockfd=socket(AF_INET,SOCK_DGRAM,0);1112//创建⽹络通信对象13struct sockaddr_in addr;14 addr.sin_family =AF_INET;15 addr.sin_port =htons(1324);16 addr.sin_addr.s_addr = inet_addr("192.168.0.143");1718while(1)19 {20 printf("请输⼊⼀个数字:");21char buf=0;22 scanf("%hhd",&buf);23 sendto(sockfd,&buf,24sizeof(buf),0,(struct sockaddr*)&addr,sizeof(addr));2526 socklen_t len=sizeof(addr);27 recvfrom(sockfd,&buf,sizeof(buf),0,(struct sockaddr*)&addr,&len); 2829if(66 ==buf)30 {31 printf(" server 成功接受\n");32 }33else34 {35 printf("server 数据丢失\n");36 }3738 }39 close(sockfd);4041 }。

VisualC设计UDP协议通信例如

VisualC设计UDP协议通信例如

Visual C++设计UDP协议通信例如一、绪言UDP是一种面向非连接,不靠得住的通信协议,相关于TCP来讲,尽管靠得住性不及,但传输效率较高。

因此在网络上仍有专门大的用途。

这几日需要了解下udp通信的进程,上网发觉这方面的资料还挺少。

于是认真的翻找了下msdn,大体上弄清楚了udp通信的进程。

做了一个测试的例子。

希望对大伙儿有帮忙。

二、UDP的通信进程server端: open a socket(socket)---&gt;name the socket(bind)--->send and receive data(sendto recvfrom)--->close socket(closesocket)client端: open a socket(socket)---------------------------->send and receive data(sendto recvfrom)--->close socket(closesocket)server端无需listen,client端无需connect,因此udp中server和client的区别相对较模糊。

只要挪用sendto和recvfrom就能够够给指定的地址收发数据,但并非保证收发的数据的完整性和靠得住性。

三、例如udpserver要紧代码:void main(){SOCKET socket1;InitWinsock();struct sockaddr_in local;struct sockaddr_in from;int fromlen =sizeof(from);=AF_INET;=htons(1000); ///监听端口=INADDR_ANY; ///本机socket1=socket(AF_INET,SOCK_DGRAM,0);bind(socket1,(struct sockaddr*)&local,sizeof local);while (1){char buffer[1024]="\0";printf("waiting for message from others-------------\n");if (recvfrom(socket1,buffer,sizeof buffer,0,(structsockaddr*)&from,&fromlen)!=SOCKET_ERROR){printf("Received datagram from %s--%s\n",inet_ntoa(),buffer); ////给cilent发信息sendto(socket1,buffer,sizeof buffer,0,(structsockaddr*)&from,fromlen);}Sleep(500);}closesocket(socket1);}udpcilent要紧代码:void main(){SOCKET socket1;InitWinsock();struct sockaddr_in server;int len =sizeof(server);=AF_INET;=htons(1000); ///server的监听端口=inet_addr("168.168.0.10"); ///server的地址socket1=socket(AF_INET,SOCK_DGRAM,0);while (1){char buffer[1024]="\0";printf("input message\n");scanf("%s",buffer);if (strcmp(buffer,"bye")==0)break;if (sendto(socket1,buffer,sizeof buffer,0,(structsockaddr*)&server,len)!=SOCKET_ERROR){if (recvfrom(socket1,buffer,sizeof buffer,0,(struct sockaddr*)&server,&len) != SOCKET_ERROR)printf("rece from server:%s\n",buffer);}}closesocket(socket1);}四、终止语UDP通信比TCP简单了很多,在数据靠得住性不是很高的情形下,有利用的价值。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

VC实现最简单的UDP通信//Client端代码#include <winsock2.h>#include <iostream.h>#include <stdio.h>void initClient();int main(){initClient();return 0;}void initClient(){WSADATA wsaData;int error=WSAStartup(MAKEWORD(2,2),&wsaData);if(error!=0){cout<<"初始化DLL失败"<<endl;return;}if(LOBYTE(wsaData.wVersion)!=2 || HIBYTE(wsaData.wVersion)!=2){WSACleanup();cout<<"版本出错"<<endl;return;}SOCKET s=socket(AF_INET,SOCK_DGRAM,0);SOCKADDR_IN sockSend;sockSend.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");sockSend.sin_port=htons(4000);sockSend.sin_family=AF_INET;char buff[1024];strcpy(buff,"hello,it's the first!");int i=500;while(--i){int lenword;lenword=sendto(s,buff,strlen(buff)+1,0,(sockaddr*)&sockSend,sizeof(sockaddr));cout<<lenword<<","<<sockSend.sin_port<<":"<<sockSend.sin_addr.S_un.S _addr<<endl;}closesocket(s);WSACleanup();}//Server端代码#include <winsock2.h>#include <iostream>#include <stdio.h>using namespace std;void initNet();int main(){initNet();return 0;}void initNet(){WSADATA wsaData;int error=WSAStartup(MAKEWORD(1,1),&wsaData);if(error!=0){cout<<"初始化DLL失败"<<endl;return;}if(LOBYTE(wsaData.wVersion)!=1 || HIBYTE(wsaData.wVersion)!=1) {WSACleanup();cout<<"版本出错"<<endl;return;}SOCKET s=socket(AF_INET,SOCK_DGRAM,0);SOCKADDR_IN sockSrc;sockSrc.sin_addr.S_un.S_addr=htonl(INADDR_ANY);sockSrc.sin_port=htons(4000);sockSrc.sin_family=AF_INET;bind(s,(SOCKADDR *)&sockSrc,sizeof(SOCKADDR));char recBuff[1024];memset(recBuff,0,1024);SOCKADDR_IN sockRec;int len=sizeof(SOCKADDR);int x=-1;cout<<sockSrc.sin_port<<":"<<sockSrc.sin_addr.S_un.S_addr<<endl; while(x==-1){x=recvfrom(s,recBuff,sizeof(recBuff),0,(sockaddr *)&sockRec,&len);}printf("the receive is:%s,%d \n",recBuff,x);closesocket(s);WSACleanup();}程序能够运行,客户端发送的数据服务端收不道,运行时客户端和服务都再一台机器Windows 95环境下,基于TCP/IP协议,用Winsock完成了话音的一端传输摘要:在Windows 95环境下,基于TCP/IP协议,用Winsock完成了话音的端到端传输。

采用双套接字技术,阐述了主要函数的使用要点,以及基于异步选择机制的应用方法。

同时,给出了相应的实例程序。

一、引言Windows 95作为微机的操作系统,已经完全融入了网络与通信功能,不仅可以建立纯Windows 95环境下的“对等网络”,而且支持多种协议,如TCP/IP、IPX/SPX、NETBUI 等。

在TCP/IP协议组中,TPC是一种面向连接的协义,为用户提供可靠的、全双工的字节流服务,具有确认、流控制、多路复用和同步等功能,适于数据传输。

UDP协议则是无连接的,每个分组都携带完整的目的地址,各分组在系统中独立传送。

它不能保证分组的先后顺序,不进行分组出错的恢复与重传,因此不保证传输的可靠性,但是,它提供高传输效率的数据报服务,适于实时的语音、图像传输、广播消息等网络传输。

Winsock接口为进程间通信提供了一种新的手段,它不但能用于同一机器中的进程之间通信,而且支持网络通信功能。

随着Windows 95的推出。

Winsock已经被正式集成到了Windows系统中,同时包括了16位和32位的编程接口。

而Winsock的开发工具也可以在Borland C++4.0、Visual C++2.0这些C编译器中找到,主要由一个名为winsock.h 的头文件和动态连接库winsock.dll或wsodk32.dll组成,这两种动态连接库分别用于Win16和Win32的应用程序。

本文针对话音的全双工传输要求,采用UDP协议实现了实时网络通信。

使用VisualC++2.0编译环境,其动态连接库名为wsock32.dll。

二、主要函数的使用要点通过建立双套接字,可以很方便地实现全双工网络通信。

1.套接字建立函数:SOCKET socket(int family,int type,int protocol)对于UDP协议,写为:SOCKRET s;s=socket(AF_INET,SOCK_DGRAM,0);或s=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP)为了建立两个套接字,必须实现地址的重复绑定,即,当一个套接字已经绑定到某本地地址后,为了让另一个套接字重复使用该地址,必须为调用bind()函数绑定第二个套接字之前,通过函数setsockopt()为该套接字设置SO_REUSEADDR套接字选项。

通过函数getsockopt()可获得套接字选项设置状态。

需要注意的是,两个套接字所对应的端口号不能相同。

此外,还涉及到套接字缓冲区的设置问题,按规定,每个区的设置范围是:不小于512个字节,大大于8k字节,根据需要,文中选用了4k字节。

2.套接字绑定函数int bind(SOCKET s,struct sockaddr_in*name,int namelen)s是刚才创建好的套接字,name指向描述通讯对象的结构体的指针,namelen是该结构体的长度。

该结构体中的分量包括:IP地址(对应name.sin_addr.s_addr)、端口号(name.sin_port)、地址类型(name.sin_family,一般都赋成AF_INET,表示是internet 地址)。

(1)IP地址的填写方法:在全双工通信中,要把用户名对应的点分表示法地址转换成32位长整数格式的IP地址,使用inet_addr()函数。

(2)端口号是用于表示同一台计算机不同的进程(应用程序),其分配方法有两种:1)进程可以让系统为套接字自动分配一端口号,只要在调用bind前将端口号指定为0即可。

由系统自动分配的端口号位于1024~5000之间,而1~1023之间的任一TCP或UDP端口都是保留的,系统不允许任一进程使用保留端口,除非其有效用户ID是零(超级用户)。

2)进程可为套接字指定一特定端口。

这对于需要给套接字分配一众所端口的服务器是很有用的。

指定范围为1024和65536之间。

可任意指定。

在本程序中,对两个套接字的端口号规定为2000和2001,前者对应发送套接字,后者对应接收套接字。

端口号要从一个16位无符号数(u_short类型数)从主机字节顺序转换成网络字节顺序,使用htons()函数。

根据以上两个函数,可以给出双套接字建立与绑定的程序片断。

//设置有关的全局变量SOCKET sr,ss;HPSTR sockBufferS,sockBufferR;HANDLE hSendData,hReceiveData;DWROD dwDataSize=1024*4;struct sockaddr_in therel.there2;#DEFINE LOCAL_HOST_ADDR 200.200.200.201#DEFINE REMOTE_HOST-ADDR 200.200.200.202#DEFINE LOCAL_HOST_PORT 2000#DEFINE LOCAL_HOST_PORT 2001//套接字建立函数BOOL make_skt(HWND hwnd){struct sockaddr_in here,here1;ss=socket(AF_INET,SOCK_DGRAM,0);sr=socket(AF_INET,SOCK_DGRAM,0);if((ss==INVALID_SOCKET)||(sr==INVALID_SOCKET)){MessageBox(hwnd,“套接字建立失败!”,“”,MB_OK);return(FALSE);}here.sin_family=AF_INET;here.sin_addr.s_addr=inet_addr(LOCAL_HOST_ADDR);here.sin_port=htons(LICAL_HOST_PORT);//another socketherel.sin_family=AF_INET;herel.sin_addr.s_addr(LOCAL_HOST_ADDR);herel.sin_port=htons(LOCAL_HOST_PORT1);SocketBuffer();//套接字缓冲区的锁定设置setsockopt(ss,SOL_SOCKET,SO_SNDBUF,(char FAR*)sockBufferS,dwDataSize); if(bind(ss,(LPSOCKADDR)&here,sizeof(here))){MessageBox(hwnd,“发送套接字绑定失败!”,“”,MB_OK);return(FALSE);}setsockopt(sr SQL_SOCKET,SO_RCVBUF|SO_REUSEADDR,(char FAR*) sockBufferR,dwDataSize);if(bind(sr,(LPSOCKADDR)&here1,sizeof(here1))){MessageBox(hwnd,“接收套接字绑定失败!”,“”,MB_OK);return(FALSE);}return(TRUE);}//套接字缓冲区设置void sockBuffer(void){hSendData=GlobalAlloc(GMEM_MOVEABLE|GMEM_SHARE,dwDataSize);if(!hSendData){MessageBox(hwnd,“发送套接字缓冲区定位失败!”,NULL,MB_OK|MB_ICONEXCLAMATION);return;}if((sockBufferS=GlobalLock(hSendData)==NULL){MessageBox(hwnd,“发送套接字缓冲区锁定失败!”,NULL,MB_OK|MB_ICONEXCLAMATION);GlobalFree(hRecordData[0];return;}hReceiveData=globalAlloc(GMEM_MOVEABLE|GMEM_SHARE,dwDataSize);if(!hReceiveData){MessageBox(hwnd,"“接收套接字缓冲区定位败!”,NULLMB_OK|MB_ICONEXCLAMATION);return;}if((sockBufferT=Globallock(hReceiveData))=NULL)MessageBox(hwnd,"发送套接字缓冲区锁定失败!”,NULL,MB_OK|MB_ICONEXCLAMATION);GlobalFree(hRecordData[0]);return;}{3.数据发送与接收函数;int sendto(SOCKET s.char*buf,int len,int flags,struct sockaddr_in to,int tolen);int recvfrom(SOCKET s.char*buf,int len,int flags,struct sockaddr_infron,int*fromlen)其中,参数flags一般取0。

相关文档
最新文档