링크 ux 에서 udp 프로 그래 밍 을 통 해 이미지 파일 을 수신 하고 보 냅 니 다.
3885 단어 linuxshell네트워크 프로 그래 밍
udp 는 사 무 를 대상 으로 하 는 간단 하고 신뢰 할 수 없 는 정보 전송 서 비 스 를 제공 합 니 다. 비교적 좋 은 실시 성 을 가지 고 연결 되 지 않 은 전송 층 프로 토 콜 입 니 다. 작업 효율 이 TCP 보다 높 습 니 다. 먼저 udp 프로 그래 밍 절 차 를 소개 합 니 다.
udp 클 라 이언 트:
1. socket 소켓 만 들 기
2. ip port 설정
3. sendto () 메시지 보 내기
4. close () 소켓 닫 기
udp 서버:
1. socket 소켓 만 들 기
2. ip port 설정
3. setsockopt () 포트 바 인 딩 제한 취소 (선택 가능)
4. bind () 바 인 딩 ip port
5. recvfrom () 수신 정보
6. close () 소켓 닫 기
헤더 파일:
#ifndef _HEAD_H
#define _HEAD_H
#include
#include //socket所需头文件
#include
#include //ip 地址转换所需头文件
#include
#include //htonl htons 所需的头文件
#include //memset 所需头文件
#include //write read 所需头文件
#include //malloc 所需头文件
#include //open 所需头文件
#include
#endif
클 라 이언 트:
#include "head.h"
int main(int argc,char *argv[])
{
if(argc<3)
{
//如 ./client 192.168.8.62 8888 /mnt/hgfs/Vms/a.bmp
printf("传参少了,你应该输入 ./main ip port bmp
");
return -1;
}
int client_fd;
struct sockaddr_in dest_addr;
//创建套接字
client_fd = socket(AF_INET,SOCK_DGRAM,0); //UDP
if(client_fd == -1)
{
printf("create endpoint failed
");
return -1;
}
//配置参数
dest_addr.sin_family = AF_INET;
dest_addr.sin_addr.s_addr = inet_addr(argv[1]);
dest_addr.sin_port = htons(atoi(argv[2]));
int dest_len=sizeof(dest_addr);
//发送信息
while(1)
{
int ret;
int bmp_fd;
int bmp_size;
char *buf;
//定位图片
bmp_fd=open(argv[3],O_RDWR);
if(bmp_fd==-1)
{
perror("open bmp failed!
");
return -1;
}
//将读写位置移到文件尾
bmp_size=lseek(bmp_fd,0,SEEK_END);
//printf("bmp_size is:%d
",bmp_size);
//为bmp_size申请堆空间
buf=malloc(bmp_size);
//将文件指针偏移到开头
lseek(bmp_fd,0,SEEK_SET);
//将图片大小读出,放在buf中
read(bmp_fd,buf,bmp_size);
//printf("bmp_size is:%d
",bmp_size);
//发送图片大小
ret=sendto(client_fd,buf,bmp_size,0,(struct sockaddr *)&dest_addr,dest_len);
printf("ret is:%d
",ret);
if(ret == -1)
{
perror("Sendto ");
return -1;
}
else
break;
close(bmp_fd);
}
//记得关闭套接字
close(client_fd);
return 0;
}
서버:
#include "head.h"
int main(int argc,char*argv[])
{
if(argc<3)
{
//如 ./server 192.168.8.62 8888
printf("传参少了,你应该输入 ./main ip port
");
return -1;
}
int server_id;
int bind_id;
struct sockaddr_in server_addr,from_addr;
//创建套接字
server_id=socket(AF_INET,SOCK_DGRAM,0);
if(server_id == -1)
{
perror("Create server_id failure");
return -1;
}
//配置参数
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = inet_addr(argv[1]); //ip
server_addr.sin_port = htons(atoi(argv[2])); //port
int len=sizeof(struct sockaddr_in);
//取消端口绑定限制
int opt = 1;
if(setsockopt(server_id, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt)) < 0)
{
perror("setsockopt error");
}
//绑定
bind_id=bind(server_id,(struct sockaddr *)&server_addr,len);
if(bind_id == -1)
{
perror("Create bind_id failure");
return -1;
}else
printf("Bind Success
");
//接收信息
int from_len=sizeof(from_addr);
int bmp_fd;
int ret;
char buf[10000];
bmp_fd=open("/home/lgl/test.bmp",O_CREAT|O_RDWR|O_TRUNC);
if(bmp_fd==-1)
{
printf("create bmp failed!
");
return -1;
}
ret=recvfrom(server_id,buf,10000,0,NULL,&from_len);
printf("ret is:%d
",ret);
write(bmp_fd,buf,ret);
close(bmp_fd);
//关闭套接字
close(server_id);
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
용감한 바로 가기 및 우분투 응용 프로그램안녕하세요 여러분, 이 기사에서는 모든 사이트에서 pwa를 생성하고 실행기 응용 프로그램으로 추가하는 방법을 설명하고 싶습니다. 일부 웹사이트는 PWA로 설치를 허용하지 않지만 유사한 애플리케이션을 원합니다. 1. ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.