Linux TCP/IP通讯建立

原文链接:http://blog.csdn.net/itisyang/article/details/48209223


服务器建立:

采用了多线程方式,可连接多个客户端,每连接一个客户端就创建一个输入线程和一个接受线程,使得输入和接收互不干扰

#include<arpa/inet.h>
#include<stdio.h>
#include<stdlib.h>
#include<sys/socket.h>
#include<unistd.h>
#include<netinet/in.h>
#include<string.h>
#include<pthread.h>
#include<fcntl.h>
#include"wrap.h"

char buff[BUFSIZ];

void* thread_fun(void* arg)
{
	if(pthread_detach(pthread_self())){
		printf("thread detach fail\n");
	}
	int len;
	while(1){	
		bzero(buff,BUFSIZ);
	        len = Read((int)arg,buff,BUFSIZ);
		if(len<=0){
			printf("connect lost\n");
			close((int)arg);
			return (void*) 1;
		}		
		printf("%s\n",buff);
	}
	return (void*) 0;
}

void* thread_fun2(void* arg)
{
	char main_buff[BUFSIZ];	
	int len;
	if(pthread_detach(pthread_self())){
		printf("thread detach fail\n");
	}
	while(1){
		bzero(main_buff,BUFSIZ);			
		len = read(STDIN_FILENO,main_buff,BUFSIZ);
		Write((int)arg,main_buff,len);
	}
	return (void*)0;
}
int main()
{
	pthread_t id1,id2;

	struct sockaddr_in servaddr,clientaddr;
	socklen_t addlen;
	int clifd;
	int err;

//creat tcp option	
	int sockfd = socket(AF_INET,SOCK_STREAM,0);
	if(sockfd == -1){
		perror("socket");
		return 1;
	}
//	int opt = 1;
	int opt = SO_REUSEADDR;
	setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof(opt));
//initialization of socket()
	memset(&servaddr,0,sizeof(struct sockaddr_in));
	//bzero(&servaddr,sizeof(sockaddr_in));
	servaddr.sin_family = AF_INET;
	servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
	servaddr.sin_port = htons(8080);
	addlen = sizeof(struct sockaddr_in);

	Bind(sockfd,(struct sockaddr*)&servaddr,sizeof(servaddr));
	
	while(1){
	        Listen(sockfd,10);
		clifd = Accept(sockfd,(struct sockaddr*)&clientaddr,&addlen);	
		
		printf("new client,ip:%s,%d\n",inet_ntoa(clientaddr.sin_addr),ntohs(clientaddr.sin_port));
		if(clifd>=0){	
			pthread_create(&id1,NULL,thread_fun,(void*)clifd);
			pthread_create(&id2,NULL,thread_fun2,(void*)clifd);
		}	
	}
	psuse();
	close(clifd);
	close(sockfd);
	return 0;
}



客户端建立:

类似服务器

#include<arpa/inet.h>
#include<stdio.h>
#include<stdlib.h>
#include<sys/socket.h>
#include<unistd.h>
#include<netinet/in.h>
#include<string.h>
#include<pthread.h>
#include<fcntl.h>
#include"wrap.h"

void* fun1(void *arg)
{
	char buff[BUFSIZ];
	while(1){
		memset(buff,0,BUFSIZ);
		int err = read((int)arg,buff,BUFSIZ);
		if(err<0)	
			printf("read error\n");
		printf("%s",buff);
	}
}

void* fun2(void* arg)
{
	char buff[BUFSIZ];
	while(1){
		memset(buff,0,BUFSIZ);
		read(STDIN_FILENO,buff,BUFSIZ);
		write((int)arg,buff,strlen(buff));
	}

}



int main(int arg,char *argv[])
{
	pthread_t id1,id2;
	struct sockaddr_in sock;
	int clifd;
	int err;

//creat tcp option	
	int sockfd = socket(AF_INET,SOCK_STREAM,0);
	if(sockfd == -1){
		perror("socket");
		return 1;
	}
//initialization of socket()
	memset(&sock,0,sizeof(struct sockaddr_in));
	sock.sin_family = AF_INET;
	sock.sin_addr.s_addr = inet_addr(argv[1]);
	sock.sin_port = htons(8080);
	err = connect(sockfd,(struct sockaddr*)&sock,sizeof(sock));
	if(err == -1){
		perror("connect");
		return -1;
	}
	pthread_create(&id1,NULL,fun1,(void *)sockfd);
	pthread_create(&id2,NULL,fun2,(void *)sockfd);
		
	pause();
	close(sockfd);
	return 0;

}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ABB机器人与电脑可以通过TCP/IP协议进行通信。TCP/IP是一套用于互连网络的通信协议,由传输控制协议(TCP)和网络互连协议(IP)组成。 首先,要建立ABB机器人与电脑之间的TCP/IP通信连接,需要在机器人和电脑上配置相应的网络设置。机器人和电脑应处于同一局域网中,可以通过交换机、路由器等设备连接在一起。 在机器人端,需要运行ABB机器人控制器的软件,通过设置IP地址、子网掩码和默认网关等参数,使其与局域网中的其他设备进行通信。使用ABB机器人控制器的软件可以访问机器人的相关状态信息,控制机器人的运行和操作。 在电脑端,需要配置一台能够支持TCP/IP通信的计算机,可以是Windows、Linux等操作系统。通过设置电脑的网络属性,使其与机器人在同一网络中,并与机器人建立连接。在电脑上安装ABB提供的相关软件,如ABB RobotStudio等,可以通过该软件实现对机器人的控制。 一旦机器人和电脑建立TCP/IP通信连接,就可以进行数据传输和命令控制。电脑可以向机器人发送指令,如启动、停止、移动到指定位置等等。机器人可以将执行状态、传感器数据等信息发送回电脑。通过TCP/IP通信,ABB机器人可以与电脑实现实时的数据交互和控制。 总而言之,ABB机器人与电脑之间的TCP/IP通信是通过配置网络设置和运行相应的软件实现的。它使得机器人能够与计算机进行数据传输和命令控制,实现更加灵活和智能的操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值