linux网络编程代码
来源:互联网 发布:github源码 编辑:程序博客网 时间:2024/05/17 23:39
UDP
收UDP
#include <sys/types.h>
#include <sys/socket.h>
#include<pthread.h>
#include <netinet/in.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
int main(int argc, char **argv)
{
if (argc != 2)
{
printf("Usage: %s port\n", argv[0]);
exit(1);
}
printf("Welcome! This is a UDP server, I can only received message from client and reply with same message\n");
struct sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_port = htons(atoi(argv[1]));
addr.sin_addr.s_addr = htonl(INADDR_ANY);
int sock;
if ( (sock = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
{
perror("socket");
exit(1);
}
if (bind(sock, (struct sockaddr *)&addr, sizeof(addr)) < 0)
{
perror("bind");
exit(1);
}
char buff[512];
struct sockaddr_in clientAddr;
int n;
int len = sizeof(clientAddr);
while (1)
{
n = recvfrom(sock, buff, 511, 0, (struct sockaddr*)&clientAddr, &len);
if (n>0)
{
buff[n] = 0;
printf("%s %u says: %s\n", inet_ntoa(clientAddr.sin_addr), ntohs(clientAddr.sin_port), buff);
n = sendto(sock, buff, n, 0, (struct sockaddr *)&clientAddr, sizeof(clientAddr));
if (n < 0)
{
perror("sendto");
break;
}
}
else
{
perror("recv");
break;
}
}
return 0;
}
发UDP
#include <sys/types.h>
#include <sys/socket.h>
#include<pthread.h>
#include <netinet/in.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
int main(int argc, char **argv)
{
if (argc != 3)
{
printf("Usage: %s ip port", argv[0]);
exit(1);
}
printf("This is a UDP client\n");
struct sockaddr_in addr;
int sock;
if ( (sock=socket(AF_INET, SOCK_DGRAM, 0)) <0)
{
perror("socket");
exit(1);
}
addr.sin_family = AF_INET;
addr.sin_port = htons(atoi(argv[2]));
addr.sin_addr.s_addr = inet_addr(argv[1]);
if (addr.sin_addr.s_addr == INADDR_NONE)
{
printf("Incorrect ip address!");
close(sock);
exit(1);
}
char buff[512];
int len = sizeof(addr);
while (1)
{
gets(buff);
int n;
n = sendto(sock, buff, strlen(buff), 0, (struct sockaddr *)&addr, sizeof(addr));
if (n < 0)
{
perror("sendto");
close(sock);
break;
}
n = recvfrom(sock, buff, 512, 0, (struct sockaddr *)&addr, &len);
if (n>0)
{
buff[n] = 0;
printf("received:");
puts(buff);
}
else if (n==0)
{
printf("server closed\n");
close(sock);
break;
}
else if (n == -1)
{
perror("recvfrom");
close(sock);
break;
}
}
return 0;
}
组播
收组播流
#include <stdio.h>
#include <sys/types.h>#include <sys/socket.h>
#include <string.h>
#include <arpa/inet.h>
#define MAXBUF 1500
//#define PUERTO 8001
//#define GRUPO "238.123.46.66"
int main(int argc, char *argv[]){
for(int i = 0;i<argc;i++){
printf("%s\n", argv[i]);
}
int port = atoi(argv[3]);
int fd, n, r;
struct sockaddr_in srv, cli;
struct ip_mreq mreq;
char buf[MAXBUF];
memset( &srv, 0, sizeof(struct sockaddr_in) );
memset( &cli, 0, sizeof(struct sockaddr_in) );
memset( &mreq, 0, sizeof(struct ip_mreq) );
srv.sin_family = AF_INET;
srv.sin_port = htons(port);
if( inet_aton(argv[2], &srv.sin_addr ) < 0 ) {
perror("inet_aton");
return -1;
}
if( (fd = socket( AF_INET, SOCK_DGRAM, IPPROTO_UDP) ) < 0 ){
perror("socket");
return -1;
}
if( bind(fd, (struct sockaddr *)&srv, sizeof(srv)) < 0 ){
perror("bind");
return -1;
}
if (inet_aton(argv[2], &mreq.imr_multiaddr) < 0) {
perror("inet_aton");
return -1;
}
inet_aton( argv[1], &(mreq.imr_interface) );
if( setsockopt(fd, SOL_IP, IP_ADD_MEMBERSHIP, &mreq,sizeof(mreq)) < 0 ){
perror("setsockopt");
return -1;
}
n = sizeof(cli);
while(1){
if( (r = recvfrom(fd, buf, MAXBUF, 0, (struct sockaddr *)&cli, (socklen_t*)&n)) < 0 ){
perror("recvfrom");
}else{
printf("recv:%d\n",r);
buf[r] = 0;
FILE*fp =fopen("/home/1.ts","ab");
if(fp!=NULL){
fwrite(buf,1, r,fp);
fclose(fp);
}
//fprintf(stdout, "Mensaje desde %s: %s", inet_ntoa(cli.sin_addr), buf);
}
}
}
用法:./testudp 192.168.200.105 238.123.46.66 8001
发组播流
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#define PORT 10086
#define SIZE 128
int main(void)
{
int ret = -1;
int sockfd = -1;
int i = 0;
char buf[SIZE];
struct sockaddr_in peer;
sockfd = socket(AF_INET, SOCK_DGRAM, 0);
if (-1 == sockfd)
{
perror("socket");
goto err0;
}
memset(&peer, 0, sizeof(peer));
peer.sin_family = AF_INET;
peer.sin_port = htons(PORT);
inet_pton(AF_INET, "224.0.0.88", &peer.sin_addr);
printf("send data to UDP Server %s: %d\n", inet_ntoa(peer.sin_addr), ntohs(peer.sin_port));
//向多播组发送消息
while(1)
{
sprintf(buf, "hello world %d", i);
ret = sendto(sockfd, buf, strlen(buf), 0, (void*)&peer, sizeof(peer));
printf("ret: %d\n", ret);
sleep(1);
i++;
}
return 0;
err0:
return -1;
}
- linux网络编程代码
- Linux网络编程TCP参考代码
- 网络编程示例代码(window+linux)
- Linux网络编程入门+实践代码
- 【Linux网络编程】组播代码
- Linux高级网络编程网络通信客户端代码
- Linux网络编程之ICMP洪水攻击代码实例
- Linux/Unix IO多路复用之select网络编程基本代码
- python网络编程代码
- 网络编程代码实例
- [Linux] Linux网络编程
- linux 网络编程----网络协议
- linux网络代码学习
- Linux网络配置代码
- linux网络代码结构
- Linux网络配置代码
- Linux网络代码
- Linux网络代码导读
- HELLO GIT
- Access restriction: The type JPEGImageEncoder is not accessible due to restriction
- codeforces 884D Boxes And Balls (哈夫曼树)
- 腾讯云Ubuntu安装JDK、tomcat、mysql、部署网站步骤详解
- centos6.5系统将Python2.6.6升级到3.6.3版本
- linux网络编程代码
- ps导出大的像素画
- 简单的git命令
- 中国移动苏州研发中心一面
- Java动态规划模板 P
- find_package与CMake如何查找链接库详解
- 每周LeetCode算法题(九): 72. Edit Distance
- redis config 详解
- bug与故障的区别以及防范措施