링크 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에 따라 라이센스가 부여됩니다.