Linux网络编程之UDP编程,客户端标准输入给服务器端
程序员文章站
2024-03-22 18:46:58
...
11_server_udp.c
/*
Linux网络编程之UDP编程
服务器端
*/
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <strings.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/ip.h>
#include <netinet/in.h>
#define SER_PORT 9999
#define SER_IP "192.168.7.115"
void sys_error(char *ch)
{
perror(ch);
exit(1);
}
int main(void)
{
int serfd,ret;
char buf[BUFSIZ];
//1.建立数据报套接字
if((serfd=socket(AF_INET,SOCK_DGRAM,0)) < 0)
sys_error("socket failed");
//2.绑定本地ip和端口
struct sockaddr_in ser;
bzero(&ser,sizeof(ser));
ser.sin_family = AF_INET;
ser.sin_port = htons(SER_PORT);
ser.sin_addr.s_addr = inet_addr(SER_IP);
ret = bind(serfd,(struct sockaddr *)&ser,sizeof(ser));
if(ret < 0)
sys_error("bind failed");
printf("bind ok\n");
//3.接收数据
while(1)
{
bzero(buf,BUFSIZ);
ret=recvfrom(serfd,buf,BUFSIZ,0,NULL,NULL);
if(ret < 0)
sys_error("recvfrom failed");
if(!strncmp(buf,"quit",4))
break;
printf("client send buf:%s",buf);
}
return 0;
}
/*
$ ./11_server_udp
bind ok
client send buf:wooooo
client send buf:066666
*/
11_client_udp.c
/*
Linux网络编程之UDP编程,标准输入给服务器端
客户端
*/
/*
--->inet_aton( )
只能转IPV4所有地址
将strptr所指的字符串转换成32位的网络字节序二进制值
#include <arpa/inet.h>
int inet_aton(const char *strptr, struct in_addr *addrptr);
2.//通用地址结构
struct sockaddr {
sa_family_t sa_family;//地址族,AF_xxx
char sa_data[14];//14字节协议地址
}
3.//Internet协议地址结构(一般用这个)
struct sockaddr_in
{
u_short sin_family; // 地址族, AF_INET,2 bytes
u_short sin_port; // 端口,2 bytes
struct in_addr sin_addr; // IPV4地址,4 bytes
char sin_zero[8]; // 8 bytes unused,作为填充
};
4.//IP地址的转换
inet_addr( )
将strptr所指的字符串转换成32位的网络字节序二进制值,返回转换后的地址。
int_addr_t inet_addr(const char *strptr);
5.//IPv4地址结构
// internet address
struct in_addr
{
in_addr_t s_addr; // u32 network address
};
6.ssize_t sendto(int socket, const void *message, size_t length,
int flags, const struct sockaddr *dest_addr,
socklen_t dest_len);
参数1:文件描述符
参数2:发送的缓冲区
参数3:缓存区长度
参数4:一般填0
参数5:结构体信息
参数6:结构体长度
*/
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <strings.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#define SER_PORT 9999
#define SER_IP "192.168.7.115"
void sys_error(char *ch)
{
perror(ch);
exit(1);
}
int main(void)
{
int clifd,ret;
char buf[BUFSIZ];
//1.建立数据报套接字
clifd=socket(AF_INET,SOCK_DGRAM,0);
if(clifd < 0)
sys_error("socket failed");
//2.发送数据
struct sockaddr_in cli;
bzero(&cli,sizeof(cli));
cli.sin_family = AF_INET;//选择IPV4
cli.sin_port = htons(SER_PORT);//填充端口
inet_aton(SER_IP,&cli.sin_addr.s_addr);//填充ip地址
while(1)
{
bzero(buf,BUFSIZ);
fgets(buf,BUFSIZ,stdin);
ret=sendto(clifd,buf,BUFSIZ,0,(struct sockaddr *)&cli,sizeof(cli));
if(ret < 0)
sys_error("sendto failed");
if(!strncmp(buf,"quit",4))
break;
}
return 0;
}
/*
$ ./11_client_udp
wooooo
066666
quit
*/
上一篇: 线性表查找值