linux下UDP的socket编程

原创 2016年08月29日 21:23:49

自己实现了一下,主要是使用了sendto函数和recvfrom函数;

另外recvfrom和recv最主要的区别是可以得到发送端的地址。

下次接着准备实现一下ftp:

发送端:

#include <stdio.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <string.h>
#include <netinet/in.h>

#define PORT 6789
#define Buflen 100
#define Maxiter 20

int main()
{
	struct sockaddr_in send_addr;
	int sockfd, i;
	char content[Buflen], server_ip[Buflen];
	ssize_t send_size;	

	sockfd = socket(AF_INET, SOCK_DGRAM, 0);
	if(sockfd < 0){
		printf("socket create error\n");
		return -1;
	}

	send_addr.sin_port = htons(PORT);
	send_addr.sin_family = AF_INET;
	send_addr.sin_addr.s_addr = htonl(INADDR_ANY);
	
	printf("please input dest ip:\n");
	read(0, server_ip, Buflen);
	send_addr.sin_addr.s_addr = inet_addr(server_ip);
	
	for(i = 0; i < Maxiter; i ++){
		printf("please input the send message(not more than 100bytes):\n");
		read(0, content, Buflen);
		send_size = sendto(sockfd, content, Buflen, 0, (struct sockaddr *)&send_addr, sizeof(struct sockaddr));
		if(send_size < 0){
			printf("error! %d iters\n", i);
			return -1;
		} 
	}
	send_size = sendto(sockfd, "stop", 5, 0, (struct sockaddr *)&send_addr,sizeof(struct sockaddr));
	if(send_size < 0){
		printf("error!\n");
		return -1;
	}	
	close(sockfd);
	return 0;
}



接收端:

#include <stdio.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <string.h>
#include <netinet/in.h>
#include <stdlib.h>

#define PORT 6789
#define Buflen 100

int main()
{
	struct sockaddr_in send_addr, recv_addr;
	int sockfd, bind_err;
	ssize_t recv_size;
	char content[Buflen];

	sockfd = socket(AF_INET, SOCK_DGRAM, 0);
	if(sockfd < 0){
		printf("socket create error!\n");
		return -1;
	}
	
	recv_addr.sin_port = htons(PORT);
	recv_addr.sin_family = AF_INET;
	recv_addr.sin_addr.s_addr = htonl(INADDR_ANY);

	bind_err = bind(sockfd, (struct sockaddr *)&recv_addr, sizeof(struct sockaddr));
	if(bind_err < 0){
		printf("bind error!\n");
		return;
	}

	while(1){
		memset(&send_addr, 0, sizeof(send_addr));
		socklen_t buflen = sizeof(struct sockaddr);
		recv_size = recvfrom(sockfd, content, Buflen, 0, (struct sockaddr *)&send_addr, &buflen);
		if(recv_size < 0){
			printf("recvfrom error!\n");
			return -1;
		}
		if(strncmp(content, "stop", 4) == 0) break;
		printf("recv : %s\n", content);
	}
	close(sockfd);
	return 0;

}


Linux下C语言实现UDP Socket编程

转自:http://blog.csdn.net/tianshuai11/article/details/7027444 发送方: /* * File: main.c * Author: ...
  • tjssehaige
  • tjssehaige
  • 2013年01月27日 19:38
  • 48860

linux socket编程以及简单的tcp,udp的例子

linux socket编程以及简单的tcp,udp的例子通过socket编程大致对网路编程的脉络有个大致的了解,如果有不太懂的地方, 咱们可以到网络上查找手册socket的基本操作创建socket...
  • cabing2005
  • cabing2005
  • 2016年11月07日 18:40
  • 4252

linux下C/C++网络编程基本:socket实现tcp和udp的例子

简单的linux下socket编程,分别基于TCP和UDP协议实现的简单程序 linux下socket编程可以概括为以下几个函数的运用: socket() bind() listen()...
  • u012234115
  • u012234115
  • 2017年01月06日 20:43
  • 12390

linux下C/C++网络编程基本:socket实现tcp和udp的例子

简单的linux下socket编程,分别基于TCP和UDP协议实现的简单程序 linux下socket编程可以概括为以下几个函数的运用: socket() bind() listen()...
  • u012234115
  • u012234115
  • 2017年01月06日 20:43
  • 12390

Linux下C语言实现UDP Socket编程

转自:http://blog.csdn.net/tianshuai11/article/details/7027444 发送方: /* * File: main.c * Author: ...
  • tjssehaige
  • tjssehaige
  • 2013年01月27日 19:38
  • 48860

Linux下C语言实现UDP Socket编程

转自:http://blog.csdn.net/tianshuai11/article/details/7027444 发送方: [cpp] view plain copy ...
  • jrunw
  • jrunw
  • 2017年03月22日 22:24
  • 155

Linux下的socket编程实践(十) 基本UDP编程细节

在我的这两篇博客中,简单介绍并实现了基于UDP(TCP)的windows(UNIX下流程基本一致)下的服务端和客户端的程序,本文继续探讨关于UDP编程的一些细节。 http://blog.csdn....
  • NK_test
  • NK_test
  • 2015年10月26日 23:54
  • 2068

网络编程UDP的socket编程实现(linux下)

网络编程UDP的socket编程实现(linux下) 一、UDP的编程步骤: 1、服务器端: socket()->bind()->recvfrom()->sendto()->close() 2...
  • ma451152002
  • ma451152002
  • 2013年06月10日 14:29
  • 895

linux下多线程udp网络编程实现消息驱动状态机流转2

  • 2014年07月18日 14:56
  • 10KB
  • 下载

linux下多线程udp网络编程实现消息驱动状态机流转3

  • 2014年07月18日 14:58
  • 13KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:linux下UDP的socket编程
举报原因:
原因补充:

(最多只允许输入30个字)