1.TCP
服务端
#include <stdio.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <string.h>
#include <unistd.h>
#define IP "192.168.124.234"
#define PORT 8999
int main(void)
{
int lfd=socket(AF_INET,SOCK_STREAM,0);
if(lfd<0)
{
fprintf(stderr,"%d",__LINE__);
perror("socket");
return -1;
}
printf("创建套接字\n");
struct sockaddr_in sin;
sin.sin_family=AF_INET;
sin.sin_port=htons(PORT);
sin.sin_addr.s_addr=inet_addr(IP);
int reuse = 1;
if (setsockopt(lfd, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse)) < 0)
{
fprintf(stderr, "line:%d ", __LINE__);
perror("setsockopt");
return -1;
}
int bi=bind(lfd,(struct sockaddr*)&sin,sizeof(sin));
if(bi<0)
{
fprintf(stderr,"%d",__LINE__);
perror("bind");
return -1;
}
int m=listen(lfd,300);
if(m<0)
{
fprintf(stderr,"%d",__LINE__);
perror("bind");
return -1;
}
struct sockaddr_in cin;
socklen_t len=sizeof(cin);
int newfd=accept(lfd,(struct sockaddr*)&cin,&len);
if(newfd<0)
{
perror("accept");
return -1;
}
printf("服务器连接了,ip是%s,端口是%d\n",inet_ntoa(cin.sin_addr),ntohs(cin.sin_port));
char buf[255]={0};
while (1)
{
int r=recv(newfd,buf,sizeof(buf),0);
if(r<0)
{
perror("recv");
return -1;
}
if(r==0)
{
break;
}
if(strcmp(buf,"quit")==0)
{
break;
}
printf("%s\n",buf);
bzero(buf,sizeof(buf));
fgets(buf,sizeof(buf),stdin);
buf[strlen(buf)-1]='\0';
send(newfd,buf,strlen(buf),0);
if(strcmp(buf,"quit")==0)
{
break;
}
bzero(buf,sizeof(buf));
}
close(lfd);
close(newfd);
return 0;
}
客户端
#include <stdio.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <string.h>
#include <unistd.h>
#define PORT 9999
#define IP "192.168.124.234"
int main(void)
{
int fd = socket(AF_INET, SOCK_STREAM, 0);
if (fd < 0)
{
fprintf(stderr, "%d", __LINE__);
perror("socket");
return -1;
}
printf("创建套接字\n");
struct sockaddr_in sin;
sin.sin_family = AF_INET;
sin.sin_port = htons(PORT);
sin.sin_addr.s_addr = inet_addr(IP);
int reuse = 1;
if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse)) < 0)
{
fprintf(stderr, "line:%d ", __LINE__);
perror("setsockopt");
return -1;
}
int bi = bind(fd, (struct sockaddr *)&sin, sizeof(sin));
if (bi < 0)
{
fprintf(stderr, "%d", __LINE__);
perror("bind");
return -1;
}
// 允许端口号被快速重复使用
struct sockaddr_in cin;
cin.sin_family = AF_INET;
cin.sin_port = htons(8999);
cin.sin_addr.s_addr = inet_addr("192.168.124.234");
int sfd = connect(fd, (struct sockaddr *)&cin, sizeof(cin));
if (sfd < 0)
{
perror("connect");
return -1;
}
char buf[255] = {0};
while (1)
{
bzero(buf, sizeof(buf));
fgets(buf, sizeof(buf), stdin);
buf[strlen(buf) - 1] = '\0';
send(fd, buf, strlen(buf), 0);
if (strcmp(buf, "quit") == 0)
{
break;
}
bzero(buf, sizeof(buf));
int r = recv(fd, buf, sizeof(buf), 0);
if (r < 0)
{
perror("recv");
return -1;
}
if (r == 0)
{
break;
}
if (strcmp(buf, "quit") == 0)
{
break;
}
printf("%s\n", buf);
bzero(buf, sizeof(buf));
}
close(fd);
close(sfd);
return 0;
}
2.UDP
服务端
#include <stdio.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <string.h>
#include <unistd.h>
#define IP "192.168.124.234"
#define PORT 8999
int main()
{
int fd=socket(AF_INET,SOCK_DGRAM,0);
if(fd<0)
{
perror("socket");
return -1;
}
struct sockaddr_in sin;
sin.sin_family=AF_INET;
sin.sin_port=htons(PORT);
sin.sin_addr.s_addr=inet_addr(IP);
int reuse = 1;
if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse)) < 0)
{
fprintf(stderr, "line:%d ", __LINE__);
perror("setsockopt");
return -1;
}
int bi=bind(fd,(struct sockaddr*)&sin,sizeof(sin));
if(bi<0)
{
fprintf(stderr,"%d",__LINE__);
perror("bind");
return -1;
}
struct sockaddr_in cin;
socklen_t len=sizeof(cin);
char buf[255]={0};
while (1)
{
recvfrom(fd,buf,sizeof(buf),0,(struct sockaddr*)&cin,&len);
if(strcmp(buf,"quit")==0)
{
break;
}
printf("%s\n",buf);
bzero(buf,sizeof(buf));
fgets(buf,sizeof(buf),stdin);
buf[strlen(buf) - 1] = '\0';
sendto(fd,buf,sizeof(buf),0,(struct sockaddr*)&cin,sizeof(cin));
if(strcmp(buf,"quit")==0)
{
break;
}
bzero(buf,sizeof(buf));
}
close(fd);
return 0;
}
客户端
#include <stdio.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <string.h>
#include <unistd.h>
#define IP "192.168.124.234"
#define PORT 9999
int main()
{
int fd=socket(AF_INET,SOCK_DGRAM,0);
if(fd<0)
{
perror("socket");
return -1;
}
/*绑定客户端ip,可以不写,也可以写
struct sockaddr_in sin;
sin.sin_family=AF_INET;
sin.sin_port=htons(PORT);
sin.sin_addr.s_addr=inet_addr(IP);
int reuse = 1;
if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse)) < 0)
{
fprintf(stderr, "line:%d ", __LINE__);
perror("setsockopt");
return -1;
}
int bi=bind(fd,(struct sockaddr*)&sin,sizeof(sin));
if(bi<0)
{
fprintf(stderr,"%d",__LINE__);
perror("bind");
return -1;
}*/
struct sockaddr_in cin;
cin.sin_family = AF_INET;
cin.sin_port = htons(8999);
cin.sin_addr.s_addr = inet_addr("192.168.124.234");
char buf[255]={0};
while (1)
{
fgets(buf,sizeof(buf),stdin);
buf[strlen(buf) - 1] = '\0';
sendto(fd,buf,sizeof(buf),0,(struct sockaddr*)&cin,sizeof(cin));
if(strcmp(buf,"quit")==0)
{
break;
}
bzero(buf,sizeof(buf));
recvfrom(fd,buf,sizeof(buf),0,NULL,NULL);
if(strcmp(buf,"quit")==0)
{
break;
}
printf("%s\n",buf);
bzero(buf,sizeof(buf));
}
close(fd);
return 0;
}
3.机械手臂客户端
#include <stdio.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
#include <linux/input.h>
#include <fcntl.h>
#include <unistd.h>
int main(void)
{
int fd = socket(AF_INET, SOCK_STREAM, 0);//套接字
if (fd < 0)
{
fprintf(stderr, "%d", __LINE__);
perror("socket");
return -1;
}
struct sockaddr_in cin;//准备要连接服务器的地址信息
cin.sin_family = AF_INET;
cin.sin_port = htons(8888);
cin.sin_addr.s_addr = inet_addr("192.168.124.89");
int sfd = connect(fd, (struct sockaddr *)&cin, sizeof(cin));
if (sfd < 0)
{
perror("connect");
return -1;
}
printf("链接成功\n");
struct input_event eve;//键盘文件属性
int cd=open("/dev/input/event1",O_RDONLY);//打开键盘文件读取内容
if(cd<0)
{
perror("open");
return -1;
}
char buf[5]={0xff,0x02,0,65,0xff};
unsigned char buf2[5]={0xff,0x02,1,65,0xff};//机械手臂的协议规范
while (1)
{
read(cd,&eve,sizeof(eve));//读取信息
switch (eve.code*eve.value)//按键状态和值,依照这些来判定按得什么
{
case 17://红色手臂WS
buf[3]+=5;
if(buf[3]>90)
buf[3]=-90;
send(fd,buf,5,0);
break;
case 31:
buf[3]-=5;
if(buf[3]<-90)
buf[3]=90;
send(fd,buf,5,0);
break;
case 30://蓝色手臂AD
buf2[3]-=5;
if(buf2[3]<0)
buf2[3]=180;
send(fd,buf2,5,0);
break;
case 32:
buf2[3]+=5;
if(buf2[3]>180)
buf2[3]=0;
send(fd,buf2,sizeof(buf2),0);
break;
default:
continue;
}
}
//char buf[5]={0xff,0x02,0,65,0xff};
//send(fd,buf,5,0);
close(fd);
close(sfd);
close(cd);
return 0;
}