#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <stdlib.h>
#include <signal.h>
#include <sys/wait.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <string.h>
#define ERR_MSG(msg) {\
fprintf(stderr,"[%d]-> %s ",__LINE__,__func__);\
perror(msg);\
}
#define IP "192.168.124.38"
#define PORT 7777
void recycle_zombie(){
while(waitpid(-1,NULL,WNOHANG)>0);
}
int main(int argc, const char *argv[])
{
signal(17,recycle_zombie);
//创建套接字
int sfd=socket(AF_INET,SOCK_STREAM,0);
if(sfd<0){
ERR_MSG("socket")
return -1;
}
int reuser=1;
if(setsockopt(sfd,SOL_SOCKET,SO_REUSEADDR,&reuser,sizeof(reuser))){
ERR_MSG("setsockopt");
return -1;
}
struct sockaddr_in sin;
sin.sin_family = AF_INET;
sin.sin_port = htons(PORT);
sin.sin_addr.s_addr = inet_addr(IP);
bind(sfd,(struct sockaddr*)&sin,sizeof(sin));
listen(sfd,10);
while(1){
struct sockaddr_in cin;
int cinlen=sizeof(cin);
int newfd=accept(sfd,(struct sockaddr*)&cin,&cinlen);
if(fork()==0){
close(sfd);
char arr[1024]="";
while(1){
int res=recv(newfd,arr,sizeof(arr),0);
if(res==0){
puts("客户端下线");
break;
}
puts(arr);
}
close(newfd);
exit(0);
}
close(newfd);
}
close(sfd);
return 0;
}
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <string.h>
#define ERR_MSG(msg) {\
fprintf(stderr," %d %s ",__LINE__,__func__);\
perror(msg);\
}
int main(int argc, const char *argv[])
{
//cfd
int cfd=socket(AF_INET,SOCK_STREAM,0);
if(cfd<0){
ERR_MSG("socket")
return -1;
}
//绑定服务器地址
//bind 第一个参数是刚刚创建的sfd
//第二个参数是服务器的详细
//第三个是传输大小
struct sockaddr_in sin;
sin.sin_family = AF_INET;
sin.sin_port = htons(7777);
sin.sin_addr.s_addr = inet_addr("192.168.124.38");
// bind(sfd,(struct sockaddr*)&sin,sizeof(sin));
struct sockaddr_in cin;
cin.sin_family = AF_INET;
cin.sin_port = htons(6789);
cin.sin_addr.s_addr = inet_addr("192.168.124.38");
bind(cfd,(struct sockaddr*)&cin,sizeof(cin));
//链接指定的服务器
if(connect(cfd,(struct sockaddr*)&sin,sizeof(sin))<0){
ERR_MSG("connect");
return -1;
}
printf("[%s:%d]成功链接\n",inet_ntoa(sin.sin_addr),ntohs(sin.sin_port));
char arr[1024]="";
char arrr[1024]="";
int res;
while(1){
//写
printf("[%s:%d]>>>",inet_ntoa(cin.sin_addr),ntohs(cin.sin_port));
fgets(arrr,sizeof(arrr),stdin);
send(cfd,arrr,sizeof(arrr),0);
/*
//读
bzero(arr,sizeof(arr));
res=recv(cfd,arr,sizeof(arr),0);
if(res==0){
puts("服务器下线");
break;
}
printf("[%s:%d]>>>%s\n",inet_ntoa(sin.sin_addr),ntohs(sin.sin_port),arr);
*/
}
//关闭
if(close(cfd)<0){
ERR_MSG("close");
return -1;
}
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <unistd.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <errno.h>
#define PORT 6677
#define GROUP_IP "224.2.2.2"
#define INTERFACE_IP "192.168.124.38"
#define BUFFER_SIZE 1024
void ERR_MSG(const char *msg) {
perror(msg);
fprintf(stderr, "Error at line %d in function %s\n", __LINE__, __func__);
exit(EXIT_FAILURE);
}
int main() {
int sockfd = socket(AF_INET, SOCK_DGRAM, 0);
if (sockfd < 0) ERR_MSG("socket creation failed");
// 设置允许重用地址
int optval = 1;
if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval)) < 0)
ERR_MSG("setsockopt SO_REUSEADDR failed");
struct sockaddr_in server_addr, client_addr;
socklen_t addr_len = sizeof(client_addr);
// 配置服务器地址结构体
memset(&server_addr, 0, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(PORT);
inet_pton(AF_INET, GROUP_IP, &server_addr.sin_addr);
// 绑定到组播地址
if (bind(sockfd, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0)
ERR_MSG("bind failed");
// 加入组播组
struct ip_mreq imr;
imr.imr_multiaddr.s_addr = inet_addr(GROUP_IP);
imr.imr_interface.s_addr = htonl(INADDR_ANY);
if (setsockopt(sockfd, IPPROTO_IP, IP_ADD_MEMBERSHIP, &imr, sizeof(imr)) < 0)
ERR_MSG("setsockopt IP_ADD_MEMBERSHIP failed");
char buffer[BUFFER_SIZE];
while (1) {
memset(buffer, 0, BUFFER_SIZE);
ssize_t bytes_received = recvfrom(sockfd, buffer, BUFFER_SIZE, 0, (struct sockaddr *)&client_addr, &addr_len);
if (bytes_received < 0)
ERR_MSG("recvfrom failed");
}
close(sockfd);
return 0;
}
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <unistd.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#define GROUP_IP "224.2.2.2"
#define PORT 6677
#define MESSAGE "Hello from Multicast Client!"
int main() {
int sockfd;
struct sockaddr_in group_addr;
// 创建UDP套接字
if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
perror("socket creation failed");
exit(EXIT_FAILURE);
}
// 配置组播地址结构体
memset(&group_addr, 0, sizeof(group_addr));
group_addr.sin_family = AF_INET;
group_addr.sin_addr.s_addr = inet_addr(GROUP_IP);
group_addr.sin_port = htons(PORT);
while(1){
// 发送消息到组播地址
if (sendto(sockfd, MESSAGE, strlen(MESSAGE), 0, (const struct sockaddr *)&group_addr, sizeof(group_addr)) < 0) {
perror("sendto failed");
}
}
// 关闭套接字
close(sockfd);
return 0;
}
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <string.h>
#define ERR_MSG(msg) {\
fprintf(stderr," %d %s ",__LINE__,__func__);\
perror(msg);\
}
int main(int argc, const char *argv[])
{
//创建报套接字
int fd=socket(AF_INET,SOCK_DGRAM,0);
if(fd<0){
ERR_MSG("socket");
return -1;
}
struct sockaddr_in udp_in;
udp_in.sin_family = AF_INET;
udp_in.sin_port = htons(6677);
udp_in.sin_addr.s_addr = inet_addr("192.168.124.255");
/*
//组播
struct ip_mreqn mq;
mq.imr_multiaddr.s_addr = inet_addr("224.2.2.2");
mq.imr_address.s_addr = inet_addr("192.168.124.38");
mq.imr_ifindex = 2;
*/
if(bind(fd,(struct sockaddr*)&udp_in,sizeof(udp_in))<0){
ERR_MSG("bind");
return -1;
}
struct sockaddr_in udp_cin;
char arr[1024]="";
int size=sizeof(udp_cin);
//广播
int optval=1;
setsockopt(fd,SOL_SOCKET,SO_BROADCAST,&optval,sizeof(optval));
while(1){
bzero(arr,sizeof(arr));
if(recvfrom(fd,arr,sizeof(arr),0,(struct sockaddr*)&udp_cin,&size)<0){
ERR_MSG("recvfrom");
return -1;
}
puts(arr);
}
close(fd);
return 0;
}
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <string.h>
#define ERR_MSG(msg) {\
fprintf(stderr," %d %s ",__LINE__,__func__);\
perror(msg);\
}
int main(int argc, const char *argv[])
{
//创建报套接字
int fd=socket(AF_INET,SOCK_DGRAM,0);
if(fd<0){
ERR_MSG("socket")
return -1;
}
struct sockaddr_in udp_in;
udp_in.sin_family = AF_INET;
udp_in.sin_port = htons(6677);
udp_in.sin_addr.s_addr = inet_addr("192.168.124.255");
bind(fd,(struct sockaddr*)&udp_in,sizeof(udp_in));
struct sockaddr_in udp_cin;
char arr[1024]="";
int size=sizeof(udp_cin);
int optval=1;
setsockopt(fd,SOL_SOCKET,SO_BROADCAST,&optval,sizeof(optval));
while(1){
bzero(arr,sizeof(arr));
printf("[客户端]请输入>>>");
fgets(arr,sizeof(arr),stdin);
sendto(fd,arr,sizeof(arr),0,(struct sockaddr*)&udp_in,sizeof(udp_in));
}
close(fd);
return 0;
}