TCP客戶端
#include <mystdio.h>
#define CLI_PORT 6666
#define CLI_IP "192.168.124.210"
int main(int argc, const char *argv[])//argv[1] IP ?argv[2] 端口號
{
?? ?if(argc <3)
?? ?{
?? ??? ?printf("請?jiān)诿顐鲄⒍丝谔柡虸P地址\n");
?? ??? ?return -1;
?? ?}
?? ?//創(chuàng)建流式套接字文件
?? ?int cfd = socket(AF_INET,SOCK_STREAM,0);
?? ?if(cfd < 0)
?? ?{
?? ??? ?perror("socket");
?? ??? ?return -1;
?? ?}
?? ?printf("socket seccuss cfd = %d ?__%d__\n",cfd,__LINE__);
?? ?//允許端口號重復(fù)使用
?? ?int reuse = 1;
?? ?if(setsockopt(cfd,SOL_SOCKET,SO_REUSEADDR,&reuse,sizeof(reuse))<0)
?? ?{
?? ??? ?perror("setsockopt");
?? ??? ?return -1;
?? ?}
?? ?
?? ?//填充客戶端自身的地址信息,給bind函數(shù)綁定使用;
?? ?struct sockaddr_in cin;
?? ?cin.sin_family = AF_INET;
?? ?cin.sin_port ? = htons(CLI_PORT);
?? ?cin.sin_addr.s_addr ? = inet_addr(CLI_IP);
?? ?
?? ?//填充服務(wù)器的地址信息,給connet函數(shù)使用
?? ?struct sockaddr_in sin;
?? ?sin.sin_family = AF_INET;
?? ?sin.sin_port = htons(atoi(argv[1]));
?? ?sin.sin_addr.s_addr = inet_addr(argv[2]);
?? ?
?? ?//連接指定的服務(wù)器
?? ?if(connect(cfd,(struct sockaddr*)&sin,sizeof(sin))<0)
?? ?{
?? ??? ?perror("connect");
?? ??? ?return -1;
?? ?}
?? ?printf("connet seccuss __%d__\n",__LINE__);
?? ?
?? ?
?? ?char buf[128]="";
?? ?ssize_t res;
?? ?while(1)
?? ?{
?? ??? ?//從終端輸入數(shù)據(jù)
?? ??? ?printf("請輸入數(shù)據(jù)>>>\n");
?? ??? ?fgets(buf,sizeof(buf),stdin);
?? ??? ?buf[strlen(buf)-1] = '\0';
?? ??? ?//發(fā)送數(shù)據(jù)
?? ??? ?res = send(cfd,buf,sizeof(buf),0);
?? ??? ?if(res < 0)
?? ??? ?{
?? ??? ??? ?perror("send");
?? ??? ??? ?return -1;
?? ??? ?}
?? ?
?? ??? ?//接收
?? ??? ?bzero(buf,sizeof(buf));
?? ??? ?res = recv(cfd,buf,sizeof(buf),0);
?? ??? ?if(res < 0)
?? ??? ?{
?? ??? ??? ?perror("recv");
?? ??? ??? ?return -1;
?? ??? ?}
?? ??? ?else if(0 == res)
?? ??? ?{
?? ??? ??? ?printf("服務(wù)器下線 __%d__\n",__LINE__);
?? ??? ??? ?break;
?? ??? ?}
?? ??? ?printf("%s __%d__",buf,__LINE__);
?? ??? ?
?? ?
?? ?}
?? ?close(cfd);
?? ?return 0;
}文章來源地址http://www.zghlxwxcb.cn/news/detail-857662.html
UDP客戶端
#include <mystdio.h>
#define PORT 8888
#define IP "192.168.124.210"
int main(int argc, const char *argv[])
{
?? ?int cfd = socket(AF_INET,SOCK_DGRAM,0);
?? ?if(cfd < 0)
?? ?{
?? ??? ?fprintf(stderr,"line:%d",__LINE__);
?? ??? ?perror("sockaddr");
?? ??? ?return -1;
?? ?}
?? ?printf("創(chuàng)建報(bào)式套接字成功 cfd=%d __%d__\n",cfd,__LINE__);
?? ?//允許端口被重復(fù)使用
?? ?int reuse = 1;
?? ?if(setsockopt(cfd,SOL_SOCKET,SO_REUSEADDR,&reuse,sizeof(reuse))<0)
?? ?{?? ?
?? ??? ?fprintf(stderr,"line:%d",__LINE__);
?? ??? ?perror("setsockopt");
?? ??? ?return -1;
?? ?}
?? ?//填充服務(wù)器的地址信息
?? ?struct sockaddr_in sin;
?? ?sin.sin_family ?? ??? ?= AF_INET;
?? ?sin.sin_port ?? ??? ?= htons(PORT);
?? ?sin.sin_addr.s_addr = inet_addr(IP);
?? ?char buf[128] = "";
?? ?struct sockaddr_in rcv;
?? ?socklen_t addrlen = sizeof(rcv);
?? ?while(1)
?? ?{
?? ??? ?bzero(buf,sizeof(buf));
?? ??? ?printf("請輸入信息>>>\n");
?? ??? ?fgets(buf,sizeof(buf),stdin);
?? ??? ?buf[strlen(buf)-1] = '\0';
?? ??? ?if(sendto(cfd,buf,sizeof(buf),0,(struct sockaddr*)&sin,sizeof(sin))<0)
?? ??? ?{
?? ??? ??? ?fprintf(stderr,"line:%d",__LINE__);
?? ??? ??? ?perror("sendto");
?? ??? ??? ?return -1;
?? ??? ?}
?? ??? ?if(strcmp(buf,"quit") == 0)
?? ??? ?{
?? ??? ??? ?break;
?? ??? ?}
?? ??? ?printf("發(fā)送成功\n");
?? ??? ?bzero(buf,sizeof(buf));
?? ??? ?if(recvfrom(cfd,buf,sizeof(buf),0,(struct sockaddr*)&rcv,&addrlen)<0)
?? ??? ?{
?? ??? ??? ?fprintf(stderr,"line:%d",__LINE__);
?? ??? ??? ?perror("recvfrom");
?? ??? ??? ?return -1;
?? ??? ?}
?? ??? ?if(strcmp(buf,"quit") == 0)
?? ??? ?{
?? ??? ??? ?break;
?? ??? ?}
?? ??? ?printf("[%s:%d] ?%s ?__%d__\n",\
?? ??? ??? ??? ?inet_ntoa(rcv.sin_addr),ntohs(rcv.sin_port),buf,__LINE__);
?? ??? ?}
?? ?close(cfd);
?? ?return 0;
}
機(jī)械臂
#include <mystdio.h>
#define CLI_PORT 6666
#define CLI_IP "192.168.124.210"
int main(int argc, const char *argv[])//argv[1] IP ?argv[2] 端口號
{
?? ?if(argc <3)
?? ?{
?? ??? ?printf("請?jiān)诿顐鲄⒍丝谔柡虸P地址\n");
?? ??? ?return -1;
?? ?}
?? ?//創(chuàng)建流式套接字文件
?? ?int cfd = socket(AF_INET,SOCK_STREAM,0);
?? ?if(cfd < 0)
?? ?{
?? ??? ?perror("socket");
?? ??? ?return -1;
?? ?}
?? ?printf("socket seccuss cfd = %d ?__%d__\n",cfd,__LINE__);
?? ?//允許端口號重復(fù)使用
?? ?int reuse = 1;
?? ?if(setsockopt(cfd,SOL_SOCKET,SO_REUSEADDR,&reuse,sizeof(reuse))<0)
?? ?{
?? ??? ?perror("setsockopt");
?? ??? ?return -1;
?? ?}
?? ?//填充服務(wù)器的地址信息,給connet函數(shù)使用
?? ?struct sockaddr_in sin;
?? ?sin.sin_family = AF_INET;
?? ?sin.sin_port = htons(atoi(argv[1]));
?? ?sin.sin_addr.s_addr = inet_addr(argv[2]);
?? ?
?? ?//連接指定的服務(wù)器
?? ?if(connect(cfd,(struct sockaddr*)&sin,sizeof(sin))<0)
?? ?{
?? ??? ?perror("connect");
?? ??? ?return -1;
?? ?}
?? ?printf("connet seccuss __%d__\n",__LINE__);
?? ?
?? ?int fd = open("/dev/input/event1",O_RDONLY);
?? ?if(fd<0)
?? ?{
?? ??? ?perror("open");
?? ??? ?return -1;
?? ?}
?? ??? ?
?? ?struct input_event ev;
?? ?
?? ?char buf[5]={0xff,0x02,0x00,30,0xff};
?? ?unsigned char str[5] = {0xff,0x02,0x01,20,0xff};
?? ?if(send(cfd,buf,sizeof(buf),0)< 0)
?? ?{
?? ??? ?perror("send");
?? ??? ?return -1;
?? ?}
?? ?if(send(cfd,str,sizeof(str),0)< 0)
?? ?{
?? ??? ?perror("send");
?? ??? ?return -1;
?? ?}
?? ?while(1)
?? ?{
?? ??? ?if(read(fd,&ev,sizeof(ev))<0)
?? ??? ?{
?? ??? ??? ?perror("read");
?? ??? ??? ?return -1;
?? ??? ?}
?? ??? ?switch(ev.code*ev.value)
?? ??? ?{
?? ??? ?case 17:
?? ??? ??? ?buf[3] += 5;
?? ??? ??? ?if(buf[3]>90)
?? ??? ??? ??? ?buf[3] = 90;
?? ??? ??? ?break;
?? ??? ?case 31:
?? ??? ??? ?buf[3] -= 5;
?? ??? ??? ?if(buf[3] < -90)
?? ??? ??? ??? ?buf[3] = -90;
?? ??? ??? ?break;
?? ??? ?case 30:
?? ??? ??? ?str[3] -= 5;
?? ??? ??? ?if(str[3] < 0)
?? ??? ??? ??? ?str[3] = 0;
?? ??? ??? ?break;
?? ??? ?case 32:
?? ??? ??? ?str[3] += 5;
?? ??? ??? ?if(str[3] >180 )
?? ??? ??? ??? ?str[3] = 180;
?? ??? ??? ?break;
?? ??? ?default:
?? ??? ??? ?continue;
?? ??? ?}
?? ??? ?
?? ??? ?if(send(cfd,buf,sizeof(buf),0)<0)
?? ??? ?{
?? ??? ??? ?perror("send");
?? ??? ??? ?return -1;
?? ??? ?}
?? ??? ?if(send(cfd,str,sizeof(str),0)<0)
?? ??? ?{
?? ??? ??? ?perror("send");
?? ??? ??? ?return -1;
?? ??? ?}
?? ?}
?? ?close(cfd);文章來源:http://www.zghlxwxcb.cn/news/detail-857662.html
?? ?return 0;
}
到了這里,關(guān)于TCP、UDP客戶端的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!