windows网络编程socket) c语言socket网络编程

应用程序创建socket,通过绑定,socket与驱动程序联系,向socket发送的数据通过驱动发到网络。
端口号标识在同一台计算机上运行的不同网络程序。
1.socket函数
SOCKET socket(int af, int type, int protocol)
af: 地址族,对于TCP/IP只能是AF_INET(PF_INET)
type: Socket类型,SOCK_STREAM SOCK_DGRAM
potpcol:协议, 为0则根据地址格式调整套接字类别,自动选择一个合适的协议(推荐)。
调用成功,返回SOCKET套接字描述符,否则返回INVALID_SOCKET

windows网络编程(socket) c语言socket网络编程
2.bind函数
创建完套接字,将其绑定到本地的某个地址和端口。
int bind(SOCKET s, const struct sockaddr FAR* name, intnamelen);
s:需要绑定的套接字
name:指向sockaddr结构,制定了该套接字本地信息
namelen: 该地址结构的长度
struct sockaddr
{
u_shortsa_family;
charsa_data[14];
}
sa_family:地址家族,对于TCP/IP,设置为AF_INET
sa_data:指定区域,与协议相关的具体地址信息。
可用sockaddr_in结构替换sockaddr
struct sockaddr_in
{
shortsin_family;//地址族,对于IP地址一直为AF_INET
unsignedshort sin_port;//分配给套接字的端口
structin_addr sin_addr; //套接字主机的IP地址
charsin_zero[8]; //填充数,使和sockaddr长度一样
}
bind函数调用成功返回0,调用失败返回SOCKET_ERROR
struct in_addr
{
union
{
struct{ u_char s_b1, s_b2, s_b3, s_b4;} S_un_b;
struct{ u_short s_w1, s_w2;} S_un_w;
u_long S_addr;
}S_un;
}常用这个结构将十进制格式的IP地址转换为u_long类型,并将结果赋值给S_addr.

将IP地址指定为INADDR_ANY,允许套接字向任何分配给本地机器的IP地址发送或接受数据,可以简化编程。
如果只想让套接字使用多个IP中的一个地址,必须指定实际地址,可用inet_addr函数实现。
unsigned long inet_addr(const char FAR* cp)
inet_ntoa函数完成相反的操作
char FAR* inet_ntoa(struct in_addr_in);

3.listen函数
可设置套接字为监听模式
int listen(SOCKET s, int backlog);
s: 套接字描述符
backlog:等待连接队列的最大长度.设置为SOMAXCONN,将由下层的服务提供者负责将这个套接字设置为最大的合理值。


4.accept函数
接收客户端的连接请求
int accept(SOCKET s, struct sockaddr FAR* addr; int FAR*addrlen);
s:套接字描述符,并且已经通过listen函数设置为监听状态
addr:指缓冲区,该缓冲区用来保存接收连接实体的地址(连接客户的IP地址,端口等)
addrlen: 地址信息的长度
返回地址长度

5.send函数
int send(SOCKET s, cosnt char FAR* buf; int len; int flags);
flags一般设置为0即可
buf指向要发送的缓冲区
len为缓冲区的长度

6.recv函数
int recv(SOCKET s,char FAR* buf,int len, int flags);

7.connect函数
int connect(SOCKET s, const struct sockaddr FAR* name, intnamelen);
name 为连结的服务器端地址信息

8.recvfrom函数
int recvfrom(SOCKET s, char FAR* buf, ine len ,int flags, structsock_addr FAR* from, int FAR* fromlen);
s;准备接收的套接字
from:用来接收发送端得地址信息
返回地址结构的大小

9.sendto函数
int sendto(SOCKET s, const char FAR* buf, int len, int flags, conststruct sockaddr FAR* to, int tolen)
to指定目标套接字的地址

例程:
初始化套接字:
BOOL InitSocket()
{
m_socket=socket(AF_INET,SOCK_DGRAM,0);//创建套接字
if(INVALID_SOCKET==m_socket)
{
MessageBox(NULL,TEXT("套接字创建失败!"),TEXT("错误"),MB_OK);
returnFALSE;
}
SOCKADDR_INaddrSock;
addrSock.sin_family=AF_INET;
addrSock.sin_port=htons(5000);//端口,htons的功能:将一个无符号短整型数值转换为网络字节序,即大端模式(big-endian)
addrSock.sin_addr.S_un.S_addr=htonl(INADDR_ANY);//向本地所有IP地址分配数据

intretval;
retval=bind(m_socket,(SOCKADDR*)&addrSock,sizeof(SOCKADDR));//绑定
if(SOCKET_ERROR==retval)
{
closesocket(m_socket);
MessageBox(NULL,TEXT("绑定失败"),TEXT("绑定错误"),MB_OK);
returnFALSE;
}
returnTRUE;
}

发送:
SOCKADDR_INaddrTo;
DWORD dwIP =-1062731414; //192.168.1.106
//((CIPAddressCtrl*)GetDlgItem(IDC_IPADDRESS))->GetAddress(dwIP);//CIPAddressCtrl类wince不支持
addrTo.sin_family=AF_INET;
addrTo.sin_port=htons(5000);
addrTo.sin_addr.S_un.S_addr=htonl(dwIP);


char sendBuf[5];//转弯角度为45,90,135,180,分别用字符'1','2','3'和'4'表示
sendBuf[0]='y';//右转
sendBuf[1]=anglechar;//右转角度
sendBuf[2]=m_percent[0];//占空比
sendBuf[3]=m_percent[1];//占空比
sendto(m_socket,sendBuf,4,0,(SOCKADDR*)&addrTo,sizeof(SOCKADDR));

  

爱华网本文地址 » http://www.413yy.cn/a/25101010/32662.html

更多阅读

Windows 7中清理c盘方法 c盘windows文件夹清理

装完Win7 C盘本来还有50G的空余空间,可没过多久就只剩了1、2G了,这种情况经常出现。那么究竟我们电脑的C盘里有些什么东西在作怪,怎样才能简单方便的清除它们,下面就让我们来一起看一下C盘的奥秘吧。Windows 7中清理c盘方法——工具/原

转载 C语言:随机函数rand()、srand()、random()和rando

原文地址:C语言:随机函数rand()、srand()、random()和randomized()的区别和用法作者:猎空声明一点:在VC++中,没有random()和randomize()函数,只有rand()和srand()函数。其中,random()和randomize()函数的使用的方法分别与rand()和srand()

转载 C语言贪心算法 c语言贪心算法

你真牛原文地址:C语言贪心算法作者:人鱼的泪贪心算法开放分类:算法、信息学贪心算法所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最

声明:《windows网络编程socket) c语言socket网络编程》为网友澫種唥分享!如侵犯到您的合法权益请联系我们删除