注意的是接收信息必须绑定端口号
socket 把网络协议用c语言封装为一个个函数,放到dll中供其他语言调用。
udp.h 其中.c代码就用到了extern
#ifndef UDP_H
#define UDP_H
#ifdef __cplusplus
extern "C"
{
int socket_send();
int socket_rev();
#endif
// Your prototype or Definition
#ifdef __cplusplus
}
#endif
#endif
udp.c
#include "udp.h"
#include<winsock2.h>
#include<string.h>
#include<stdio.h>
int socket_send()
{
DWORD ver;
WSADATA wsaData;
ver=MAKEWORD(1,1);
WSAStartup(ver,&wsaData);
SOCKET st=socket(AF_INET,SOCK_DGRAM,0);
struct sockaddr_in addr;
memset(&addr,0,sizeof(addr));
addr.sin_family=AF_INET;
addr.sin_port=htons(8080);
addr.sin_addr.s_addr=inet_addr("127.0.0.1");
char buf[1024]={0};
strcpy(buf,"hello world");
size_t rc= sendto(st,buf,strlen(buf),0,(struct sockaddr*)&addr,sizeof(addr));
closesocket(st);
WSACleanup();
return rc;
}
int socket_rev()
{
DWORD ver;
WSADATA wsaData;
ver=MAKEWORD(1,1);
WSAStartup(ver,&wsaData);
SOCKET st=socket(AF_INET,SOCK_DGRAM,0);
struct sockaddr_in addr;
memset(&addr,0,sizeof(addr));
addr.sin_family=AF_INET;
addr.sin_port=htons(8080);
addr.sin_addr.s_addr=htonl(INADDR_ANY);
int rc=0;
if(bind(st,(struct sockaddr*)&addr,sizeof(addr))>-1)
{
char buf[1024]={0};
struct sockaddr_in sendaddr;
int len=sizeof(sendaddr);
memset(&sendaddr,0,sizeof(sendaddr));
rc= recvfrom(st,buf,sizeof(buf),0,(struct sockaddr*)&addr,&len);
// size_t rc= sendto(st,buf,strlen(buf),0,(struct sockaddr*)&addr,sizeof(addr));
printf("%s",buf);
};
closesocket(st);
WSACleanup();
return rc;
}
主函数
#include <iostream>
#include "udp.h"
using namespace std;
int main(int argc,char *args[])
{ if(argc>1)
{
if(args[1][0]=='1')
socket_send();
else {
socket_rev();
}
}
// cout << "Hello World!" << endl;
return 0;
}
1等待输入
2进行发送
3接收打印发送信息