udp_client.c udp_server.c

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

#define SERVER_PORT 8888
#define MAX_BUF_SIZE 1024 

void udpc_requ(int sockfd,const struct sockaddr_in *addr,int len)
{
    char buffer[MAX_BUF_SIZE];
    int n;
    while(1)
    {     /* 从键盘读入,写到服务端 */
        printf("Please input char:\n");
        fgets(buffer,MAX_BUF_SIZE,stdin);
        sendto(sockfd,buffer,strlen(buffer),0,(struct sockaddr *)addr,len);
        bzero(buffer,MAX_BUF_SIZE);
    }
} 

int main(int argc,char **argv)
{
    int sockfd;
    struct sockaddr_in addr; 

    if(argc!=2)
    {
        fprintf(stderr,"Usage:%s server_ip\n",argv[0]);
        exit(1);
    }

    /* 建立 sockfd描述符 */
    sockfd=socket(AF_INET,SOCK_DGRAM,0);
    if(sockfd<0)
    {
        fprintf(stderr,"Socket Error:%s\n",strerror(errno));
        exit(1);
    } 

    /* 填充服务端的资料 */
    bzero(&addr,sizeof(struct sockaddr_in));
    addr.sin_family=AF_INET;
    addr.sin_port=htons(SERVER_PORT);
    if(inet_aton(argv[1],&addr.sin_addr)<0)  /*inet_aton函数用于把字符串型的IP地址转化成网络2进制数字*/
    {
        fprintf(stderr,"Ip error:%s\n",strerror(errno));
        exit(1);
    } 

    udpc_requ(sockfd,&addr,sizeof(struct sockaddr_in)); // 进行读写操作
    close(sockfd);
} 

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

#define SERVER_PORT 8888
#define MAX_MSG_SIZE 1024 

void udps_respon(int sockfd)
{
    struct sockaddr_in addr;
    int addrlen,n;
    char msg[MAX_MSG_SIZE]; 

    while(1)
    {    /* 从网络上读,并写到网络上 */
        bzero(msg,sizeof(msg)); // 初始化,清零
        addrlen = sizeof(struct sockaddr);
        n=recvfrom(sockfd,msg,MAX_MSG_SIZE,0,(struct sockaddr*)&addr,&addrlen); // 从客户端接收消息
        msg[n]=0;//将收到的字符串尾端添加上字符串结束标志
        /* 显示服务端已经收到了信息 */
        fprintf(stdout,"Server have received %s",msg); // 显示消息
    }
} 

int main(void)
{
    int sockfd;
    struct sockaddr_in addr; 

    /* 服务器端开始建立socket描述符 */
    sockfd=socket(AF_INET,SOCK_DGRAM,0);
    if(sockfd<0)
    {
        fprintf(stderr,"Socket Error:%s\n",strerror(errno));
        exit(1);
    } 

    /* 服务器端填充 sockaddr结构 */
    bzero(&addr,sizeof(struct sockaddr_in));
    addr.sin_family=AF_INET;
    addr.sin_addr.s_addr=htonl(INADDR_ANY);
    addr.sin_port=htons(SERVER_PORT); 

    /* 捆绑sockfd描述符 */
    if(bind(sockfd,(struct sockaddr *)&addr,sizeof(struct sockaddr_in))<0)
    {
        fprintf(stderr,"Bind Error:%s\n",strerror(errno));
        exit(1);
    } 

    udps_respon(sockfd); // 进行读写操作
    close(sockfd);
} 
时间: 2024-10-10 05:13:44

udp_client.c udp_server.c的相关文章

Python学习之旅(三十四)

Python基础知识(33):网络编程(Ⅱ) UDP编程 相对TCP,UDP则是面向无连接的协议 使用UDP协议时,不需要建立连接,只需要知道对方的IP地址和端口号,就可以直接发数据包 虽然用UDP传输数据不可靠,但它的优点是和TCP比,速度快,对于不要求可靠到达的数据,就可以使用UDP协议 服务端 1.创建Socket #创建基于UDP的socket连接 import socket s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) #绑定

UDP通讯程序设计---6

一.函数化 1.1服务器使用的函数 创建socket----->socket 绑定地址-------->bind 接受数据-------->recvfrom 发送数据-------->sendto 结束连接-------->close 1.2客户机使用函数 创建套接字------>socket 发送数据-------->sento 接受数据-------->recvfrom 结束连接-------->close 二.函数学习 2.1 发送数据sendt

Day35:基于UDO的套接字、粘包问题

一.基于UDP的套接字 UDP服务端 ss = socket() #创建一个服务器的套接字 ss.bind() #绑定服务器套接字 inf_loop: #服务器无限循环 cs = ss.recvfrom()/ss.sendto() # 对话(接收与发送) ss.close() # 关闭服务器套接字 UDP客户端 cs = socket() # 创建客户套接字 comm_loop: # 通讯循环 cs.sendto()/cs.recvfrom() # 对话(发送/接收) cs.close() #

【Python3之socket编程】

一.socket的定义 Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口.在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议.所以,我们无需深入理解tcp/udp协议,socket已经为我们封装好了,我们只需要遵循socket的规定去编程,写出的程序自然就是遵循tcp/udp标准的. 补充:也有人将socket说成ip+port,ip是用来

python编写socket服务器和客户端

本次使用的主要模块是socket模块,在这个模块中可以找到socket()函数,该函数用于创建套接字对象.套接字也有自己的方法集,这些方法可以实现基于套接字的网络通信. socket()模块函数 要创建套接字,必须使用socket.socket()函数,语法如下: socket(socket_family,socket_type,protocol=0) 其中socket_family是AF_UNIX(基于文件)或AF_INET(面向网络),socket_type是SOCK_STREAM(TCP)

聊天版本一

//udp_client.h #include<iostream> #include<sys/types.h> #include<sys/socket.h> #include<netinet/in.h> #include<arpa/inet.h> #include<stdio.h> #include<string.h> #include<string> #include<stdlib.h> #inc

udp编程

int sendto (int s, const void *buf, int len, unsigned int flags, const struct sockaddr *to, int tolen);  int recvfrom(int s, void *buf, int len, unsigned int flags, struct sockaddr *from, int *fromlen); sendto(),是把UDP数据报发给指定地址;recvfrom()是从指定地址接收UDP数据

UDP网络程序设计

udp_server #include<stdio.h>#include<sys/socket.h>#include<string.h>#include<netinet/in.h>#define portnum 3333 void main(){ int n,addrlen; char buffer[128]; struct sockaddr_in server_addr; struct sockaddr_in client_addr; int sockfd

Python基础第24天

第五模块:网络编程     一:C/S架构 即C/S架构,包括 1.硬件C/S架构(打印机) 2.软件C/S架构(web服务) 二:socket和互联网协议 1.首先:本节课程的目标就是教会你如何基于socket编程,来开发一款自己的C/S架构软件 2.其次:C/S架构的软件(软件属于应用层)是基于网络进行通信的 3.然后:网络的核心即一堆协议,协议即标准,你想开发一款基于网络通信的软件,就必须遵循这些标准. TCP/IP协议族包括运输层.网络层.链路层 Socket是应用层与TCP/IP协议族