UDP echo example
This commit is contained in:
parent
190ee94da5
commit
a8bb01e4b5
|
@ -0,0 +1,37 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#include <unistd.h> /* для вызова close() для сокета */
|
||||||
|
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
int sock;
|
||||||
|
struct sockaddr_in sa;
|
||||||
|
int bytes_sent;
|
||||||
|
const char *buffer = "Привет!";
|
||||||
|
int buffer_length;
|
||||||
|
|
||||||
|
buffer_length = strlen(buffer) + 1;
|
||||||
|
|
||||||
|
sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);
|
||||||
|
|
||||||
|
if (sock == -1) {
|
||||||
|
printf("Ошибка создания сокета");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
sa.sin_family = PF_INET;
|
||||||
|
sa.sin_addr.s_addr = htonl(0x7F000001);
|
||||||
|
sa.sin_port = htons(7654);
|
||||||
|
|
||||||
|
bytes_sent = sendto(sock, buffer, strlen(buffer) + 1, 0, (struct sockaddr *)&sa, sizeof(struct sockaddr_in));
|
||||||
|
|
||||||
|
if (bytes_sent < 0)
|
||||||
|
printf("Ошибка отправки пакета: %s\n", strerror(errno));
|
||||||
|
|
||||||
|
close(sock);
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -0,0 +1,43 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#include <netinet/in.h>
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);
|
||||||
|
|
||||||
|
struct sockaddr_in sa;
|
||||||
|
int bound;
|
||||||
|
ssize_t recsize;
|
||||||
|
socklen_t *address_len = NULL;
|
||||||
|
|
||||||
|
sa.sin_addr.s_addr = INADDR_ANY;
|
||||||
|
sa.sin_port = htons(7654);
|
||||||
|
|
||||||
|
bound = bind(sock, (struct sockaddr *)&sa, sizeof(struct sockaddr));
|
||||||
|
|
||||||
|
if (bound < 0)
|
||||||
|
fprintf(stderr, "bind(): ошибка %s\n", strerror(errno));
|
||||||
|
|
||||||
|
char Hz[1024];
|
||||||
|
|
||||||
|
while (1) {
|
||||||
|
printf("recv test....\n");
|
||||||
|
recsize = recvfrom(sock, (void *)Hz, 100, 0, (struct sockaddr *)&sa, address_len);
|
||||||
|
|
||||||
|
if (recsize < 0)
|
||||||
|
perror("Ошибка:");
|
||||||
|
|
||||||
|
printf("recsize: %d\n ", (int)recsize);
|
||||||
|
//sleep(1);
|
||||||
|
printf("datagram: %s\n", Hz);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,35 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#include <netinet/in.h>
|
||||||
|
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#include <arpa/inet.h>
|
||||||
|
|
||||||
|
#include <netdb.h>
|
||||||
|
|
||||||
|
static const char *int2ip(unsigned int ip)
|
||||||
|
{
|
||||||
|
static char s[16];
|
||||||
|
sprintf(s, "%d.%d.%d.%d", ip >> 24, ip << 8 >> 24, ip << 16 >> 24, ip << 24 >> 24);
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
if (argc < 2) {
|
||||||
|
perror("need hex ip address");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned int ip = 0;
|
||||||
|
sscanf(argv[1], "%X", &ip);
|
||||||
|
|
||||||
|
printf("%s\n", int2ip(ip));
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -0,0 +1,32 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#include <netinet/in.h>
|
||||||
|
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#include <arpa/inet.h>
|
||||||
|
|
||||||
|
#include <netdb.h>
|
||||||
|
|
||||||
|
unsigned int ip2int(const char *s)
|
||||||
|
{
|
||||||
|
int ip[4];
|
||||||
|
sscanf(s, "%d.%d.%d.%d", ip, ip + 1, ip + 2, ip + 3);
|
||||||
|
return ip[0] << 24 | ip[1] << 16 | ip[2] << 8 | ip[3];
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
if (argc < 2) {
|
||||||
|
perror("need ip address string");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("%X\n", ip2int(argv[1]));
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -0,0 +1,65 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/socket.h>
|
||||||
|
|
||||||
|
//~ domain = AF_UNIX, AF_INET, AF_INET6, AF_IPX
|
||||||
|
//~ type = SOCK_STREAM, SOCK_DGRAM, SOCK_RAW
|
||||||
|
//~ int socket(int domain, int type, int protocol);
|
||||||
|
|
||||||
|
//~ struct sockaddr {
|
||||||
|
//~ unsigned short sa_family; // Семейство адресов, AF_xxx
|
||||||
|
//~ char sa_data[14]; // 14 байтов для хранения адреса
|
||||||
|
//~ };
|
||||||
|
//~ struct sockaddr_in {
|
||||||
|
//~ short int sin_family; // Семейство адресов
|
||||||
|
//~ unsigned short int sin_port; // Номер порта
|
||||||
|
//~ struct in_addr sin_addr; // IP-адрес
|
||||||
|
//~ unsigned char sin_zero[8]; // "Дополнение" до размера структуры sockaddr
|
||||||
|
//~ };
|
||||||
|
//~ struct in_addr {
|
||||||
|
//~ unsigned long s_addr;
|
||||||
|
//~ };
|
||||||
|
//~ htons, htonl, ntohs, ntohl
|
||||||
|
//~ int bind(int sockfd, struct sockaddr *addr, int addrlen);
|
||||||
|
|
||||||
|
//~ int listen(int sockfd, int backlog);
|
||||||
|
//~ int accept(int sockfd, void *addr, int *addrlen);
|
||||||
|
|
||||||
|
// клиент
|
||||||
|
//~ int connect(int sockfd, struct sockaddr *serv_addr, int addrlen);
|
||||||
|
|
||||||
|
//~ int send(int sockfd, const void *msg, int len, int flags);
|
||||||
|
|
||||||
|
// отправка буфера целиком
|
||||||
|
//~ int sendall(int s, char *buf, int len, int flags)
|
||||||
|
//~ {
|
||||||
|
//~ int total = 0;
|
||||||
|
//~ int n;
|
||||||
|
//~
|
||||||
|
//~ while(total < len)
|
||||||
|
//~ {
|
||||||
|
//~ n = send(s, buf+total, len-total, flags);
|
||||||
|
//~ if(n == -1) { break; }
|
||||||
|
//~ total += n;
|
||||||
|
//~ }
|
||||||
|
//~
|
||||||
|
//~ return (n==-1 ? -1 : total);
|
||||||
|
//~ }
|
||||||
|
|
||||||
|
//~ int recv(int sockfd, void *buf, int len, int flags);
|
||||||
|
|
||||||
|
// закрытие соединения
|
||||||
|
//~ int close(int fd);
|
||||||
|
|
||||||
|
// запрет передачи 0 - чтения, 1 - записи, 2 - и того, и др.
|
||||||
|
//~ int shutdown(int sockfd, int how);
|
||||||
|
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
struct a {
|
||||||
|
char aaa[256];
|
||||||
|
};
|
||||||
|
|
||||||
|
printf("%lu\n", sizeof(struct a));
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -0,0 +1,25 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
void f()
|
||||||
|
{
|
||||||
|
int c = 0;
|
||||||
|
printf("c=%lu\n", (unsigned long)&c);
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
//~ printf("%lu\n", sizeof(long));
|
||||||
|
|
||||||
|
int a = 0;
|
||||||
|
|
||||||
|
int pid = fork();
|
||||||
|
printf("pid=%d\n", pid);
|
||||||
|
printf("a=%lu\n", (unsigned long)&a);
|
||||||
|
|
||||||
|
int b = 0;
|
||||||
|
printf("b=%lu\n", (unsigned long)&b);
|
||||||
|
|
||||||
|
f();
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
Loading…
Reference in New Issue