向指定服务器的指定端口发送UDP包

//功能:读取文件文件,向指定服务器的指定端口发送UDP包,
//2015.9.26 OK

#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <string.h>

//#define SERVER_PORT 8000
int SERVER_PORT = 8000;

int GetServerAddr(char * addrname,char *addrport)
{
char szTemp[512]={};
char IPaddr[512]={};
char port[512]={};
char *cfa;

FILE *file_fa = fopen("./send.conf","r+");
if(file_fa==NULL) //如果失败了
{
printf("open send.conf错误!\n");
exit(1); //中止程序
}

if((fgets(szTemp,255,file_fa)) != NULL ) //每次读一行
{
printf("szTemp=%s\n",szTemp);

cfa = strtok(szTemp, " ");
sprintf(port,"%s",cfa);
cfa = strtok(NULL, " ");
sprintf(IPaddr,"%s",cfa);
cfa = strtok(NULL, " ");
sprintf(port,"%s",cfa);

// printf("IPaddr=%s port=%s \n",IPaddr,port);

}
sprintf(addrname,"%s",IPaddr);
sprintf(addrport,"%s",port);
fclose(file_fa);
return 1;
}
int main(int argc,char **argv)
{
int cli_sockfd;
int len;
socklen_t addrlen;
char seraddr[14];
char serport[14];
struct sockaddr_in cli_addr;
char buffer[256];

GetServerAddr(seraddr,serport);
printf("GetServerAddr=%s,port=%s\n",seraddr,serport);

/* 建立socket*/
cli_sockfd=socket(AF_INET,SOCK_DGRAM,0);
if(cli_sockfd<0)
{
printf("I cannot socket success\n");
return 1;
}

/* 填写sockaddr_in*/
addrlen=sizeof(struct sockaddr_in);
bzero(&cli_addr,addrlen);
cli_addr.sin_family=AF_INET;
cli_addr.sin_addr.s_addr=inet_addr(seraddr);//将字符串转换为32位二进制网络字节序的IPV4地址
//cli_addr.sin_addr.s_addr=htonl(INADDR_ANY);
cli_addr.sin_port=htons( atoi(serport) );//主机字节顺序转化为网络字节顺序
// cli_addr.sin_port=htons(SERVER_PORT);

bzero(buffer,sizeof(buffer));
/* 从标准输入设备取得字符串*/
// len=read(STDIN_FILENO,buffer,sizeof(buffer));
sprintf(buffer,"%s","nihao");
len = sizeof(buffer)+1;
/* 将字符串传送给server端*/
while(1)
{
printf("sendword=%s\n",buffer);
sendto(cli_sockfd,buffer,len,0,(struct sockaddr*)&cli_addr,addrlen);
sleep(2);
}
/* 接收server端返回的字符串*/
len=recvfrom(cli_sockfd,buffer,sizeof(buffer),0,(struct sockaddr*)&cli_addr,&addrlen);
//printf("receive from %s\n",inet_ntoa(cli_addr.sin_addr));
printf("receive: %s",buffer);
close(cli_sockfd);
}

时间: 2024-10-24 15:17:32

向指定服务器的指定端口发送UDP包的相关文章

raw socket 发送数据包

TRawSocket = class(TObject) private buf: array[0..BUFLEN - 1] of char; FdwNotifyWnd: Cardinal; hsocket: Cardinal; str: string; public constructor Create; destructor Destroy; override; function createSocket: Integer; procedure destroySocket; function

Java工具-检验ftp服务器的指定文件是否存在

项目工作中,需要检验ftp服务器中指定文件是否存在,在网上查阅了相关资料,可以通过ftpClient类进行实现. import org.apache.commons.net.ftp.FTP; import org.apache.commons.net.ftp.FTPClient; import org.apache.commons.net.ftp.FTPReply; /** * 检验指定路径的文件是否存在ftp服务器中 * @param filePath--指定绝对路径的文件 * @param

android 发送UDP广播,搜寻服务器建立socket链接

应用场景:客户端(手机,pc)需要搜寻所在局域网内的服务器并获得服务器地址. 方法简介:客户端发送UDP广播,服务收到广播后得到客户端ip地址,然后向客户端发送一次socket链接,客户端收到socket链接,获得服务器地址. 相关知识: UPD.TCP.TCP是面向链接的,可靠的通信方式.UDP是面向非链接的通讯方式.TCP的建立比较麻烦,要经过"三次握手".而UDP的建立比较简单,发送方只管把内容发送出去,不管接收方是否收到.UDP的传输分为:单播,多播,广播.其中,多播和广播是通

Jenkins构建完成后自动部署到指定服务器

主要分为两步: 1.发送Jenkins构建好的war包到指定服务器 2.执行部署脚本 这里是通过使用  publish over ssh 插件. 插件管理中搜索publish over ssh 安装,完成后系统设置中就可以看到相关设置项了. Jenkins服务器上的公钥需要放到部署项目服务器上,可以使用ssh-add-id命令发送公钥到指定服务器. Passphrase : 私钥的密码 key : 私钥的内容 ,也可以在Pah to key中设置私钥路径 Name : 可以自定义 Hostnam

mysql自动备份数据库,同时ftp上传到指定服务器(scp远程获取本地备份)

最近要把服务器托管到电信机房,所以要对数据库进行备份,同时要把备份ftp上传到公司指定服务器. 一.先安装ftp服务 1.查询是否安装vsftpd: rpm -qa |grep vsftpd (rpm的安装:apt-get install rpm) 或者查询当前ftp进程:ps -ef|grep vsftpd ? 或者 ps -ef|grep ftp 2.如果没有就安装yum install vsftpd 3.安装完后看ftp安装目录:ps -ef|grep ftp 发现我的配置文件默认:/et

[自动运维]ant脚本打包,上传文件到指定服务器,并部署

1.根节点使用,表示根目录为当前目录,默认启动的target为build,项目名称为othersysm, <project basedir="." default="build" name="othersysm"> </project> 2.每一个target为一个执行命令,如果有依赖关系,则写为: <target depends="build-project" name="build&

自动压缩备份数据库文件至指定服务器

公司用的数据库服务器每天都要备份,之前都是手动压缩,再拷贝一份至另一台存储. 闲来无事就决定用个脚本可以自动备份和复制 网上有很多资料,百度一下就有了 环境介绍 数据库备份文件存放在D:\beife\下 有一台同网段的服务器作为存放压缩文件备份 2. 压缩文档 先安装Winrar软件,并确定路径,稍后需要在系统环境变量里配置 我先将存储服务器的某个网络共享文件夹映射为网盘L,然后新建txt文件,输入使用以下命令 rar a -df -agYYYY-MM-DD  L:\  D:\oracle\bf

SQL Server 复制需要有实际的服务器名称才能连接到服务器.请指定实际的服务器名称

新到一家公司上班,对服务器状况不是很熟悉.昨天Boss让我调查两台服务器是否满足事务复制的条件. 于是直接在服务器上尝试新建发布,结果就出现了标题的错信息:SQL Server 复制需要有实际的服务器名称才能连接到服务器.请指定实际的服务器名称“AAA”.(Replication.Utilities) 心想肯定是服务器改过名字,之前也在群里听说过. 百度上一搜,基本上都是如下的解决方案: IF SERVERPROPERTY('SERVERNAME') <> @@SERVERNAME BEGIN

"SQLServer复制需要有实际的服务器名称才能连接到服务器,请指定实际的服务器名"转

?"SQLServer复制需要有实际的服务器名称才能连接到服务器,请指定实际的服务器名"?2014-06-12 12:01:10 最近在学习SQL SERVER的高级复制技术的时候,遇到一个小问题,就是用本地SQL SERVER连接服务器的数据库时,在查看复制功能的发布服务器时,连接不上,弹出一个错误提示框架,如下: 原来在自己本地的实例是一切操作正常的,一连接到远程服务器时就出现这个问题,后来在网上找了下,发现有这两种情况:一.自己本身的计算机名称修改过,导致与服务器不一致.二.在直