[

第一个arm板到第二个arm板传输有问题很卡,arm板是Linux系统,tinny6410的板子。程序如下:服务器端(arm1)
复制代码- #include <stdio.h>//server program
- #include <stdlib.h>//第一个arm板服务器端代码
- #include <string.h>
- #include <sys/socket.h>
- #include <netinet/in.h>
- #include <netdb.h>
- #include <stddef.h>
- #include <unistd.h>
- #include <pthread.h>
- #include <fcntl.h>
- #include <io.h>
- #include <sys/stat.h>
- #include <unistd.h>
- #include <linux/tcp.h>
- #define SERVER_PORT 7777
- #define LISTEN_QUEUE_LENGTH 20
- #define BUFFER_SIZE 1024
- #define MAX_THREAD_NUM 100
- #define HOST_ADDR "202.207.25.53"
- int thread_count = 0;
- pthread_t threads[MAX_THREAD_NUM];
- int static cout=1;
- int client_conn;
- int flag=0,tmp_sock;
- int pthread_err;
- fd_set rfd_set,wfd_set;
- struct timeval timeout={2,0};
- pthread_attr_t attr,attr1;
- struct sched_param param,param1;
- // long newprio_send=108400000,newprio_net=1083;
- /**
- * 艙脫脢脮脢媒鸥脻碌脛脰沤脨脨潞炉脢媒
- * @param conn_socket
- */
- void recv_data(int conn_socket);
- /*
- * 脰梅路艙路拧
- */
- int main(int argc, char** argv)
- {
- // 艙拧脕垄Socket
- int ret;
- int server_socket = socket(PF_INET, SOCK_STREAM, 0);
- if (server_socket < 0) {
- printf("Socket create failed.\n");
- return EXIT_FAILURE;
- }
- {
- int opt = 1;
- setsockopt(server_socket, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof (opt));
- }
- // 脡猫脰脙路镁脦帽脝梅露脣艗脿脤媒脤脳艙脫脳脰虏脦脢媒
- struct sockaddr_in server_addr;
- bzero(&server_addr, sizeof (server_addr));
- server_addr.sin_family = AF_INET;
- server_addr.sin_addr.s_addr = inet_addr(HOST_ADDR);
- server_addr.sin_port = htons(SERVER_PORT);
- // 掳贸露拧露脣驴脷
- if (bind(server_socket, (struct sockaddr*) &server_addr, sizeof (server_addr)))
- {
- printf("Bind port %d failed.\n", SERVER_PORT);
- return EXIT_FAILURE;
- }
-
- // 驴陋脢艗艗脿脤媒
- if (listen(server_socket, LISTEN_QUEUE_LENGTH))
- {
- printf("Server Listen Failed!");
- return EXIT_FAILURE;
- }
- fcntl(server_socket,F_SETFD,O_NONBLOCK);
-
- // 驴陋脢艗沤艩脌铆驴脥禄搂露脣脕卢艙脫
- bzero(&threads, sizeof(pthread_t) * MAX_THREAD_NUM);
- int opt = 1,sok;
- setsockopt(server_socket, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof (opt));
- sok=setsockopt(server_socket, IPPROTO_TCP,TCP_NODELAY,(char*)&opt, sizeof (opt));
- if(sok==-1){printf("Can't seting!");}
- while (1)
- {
- struct sockaddr_in client_addr;
- socklen_t length = sizeof(client_addr);
- FD_ZERO(&rfd_set);
- FD_SET(server_socket,&rfd_set);
- // 艙拧脕垄驴脥禄搂露脣脕卢艙脫
- ret=select(server_socket+1,&rfd_set,NULL,NULL,&timeout);
- if(ret==0){continue;}
- if(FD_ISSET(server_socket,&rfd_set))
- {
- int client_conn = accept(server_socket, (struct sockaddr*) &client_addr, &length);
- if (client_conn < 0)
- {
- printf("Server Accept Failed!\n");
- return EXIT_FAILURE;
- }
-
- // 脨脗艙拧脧脽鲁脤, 脢鹿脫脙脨脗脧脽鲁脤脫毛驴脥禄搂露脣艙禄禄楼
- pthread_attr_init(&attr);
- pthread_attr_setschedpolicy(&attr,SCHED_RR);
- if(flag==0){tmp_sock=client_conn;flag=1;}
- else{
- //param.sched_priority=newprio_net;
- //pthread_attr_setschedparam(&attr, ¶m);
- pthread_create(threads + (thread_count++), NULL, (void *)recv_data, (void *)client_conn);}
- if (pthread_err != 0)
- {
- printf("Create thread Failed!\n");
- return EXIT_FAILURE;
- }
-
- }
- }
- close(server_socket);
- return (EXIT_SUCCESS);
- }
- void recv_data(int conn_socket)
- {
- char buffer[BUFFER_SIZE];
- bzero(buffer, BUFFER_SIZE);
- int length = 0,tmp=0;
- while (length = recv(conn_socket, buffer, BUFFER_SIZE, 0))
- {
- if (length < 0)
- {
- printf("Server Recieve Data Failed! code %d\n", length);
- }tmp+=length;
- write(tmp_sock,buffer,length);
- printf("time=%d\t length=%d\t the buffer is: %s\n ", cout,tmp,buffer);
- cout++;
- bzero(buffer, BUFFER_SIZE);
- }
- close(conn_socket);
- }
|
[code][
#include <stdio.h>、、第二个ARM板的客户端程序
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <stdlib.h>
#include <string.h>
#include <stddef.h>
#include <unistd.h>
#include <pthread.h>
#include <fcntl.h>
#include <io.h>
#include <sys/stat.h>
#include <unistd.h>
#define MAXBUFFSIZE 1024
#define PORT 7777
#define HOST_ADDR "202.207.25.53"
int fd_net_syn;
int main(int argc, char *argv[])
{
int tmp_socket;
if((fd_net_syn=open("send_synew",O_CREAT|O_TRUNC|O_RDWR))==-1)
{
printf("Can't open the file:send.txt\n");
}
int sockfd,n;
char recvbuff[MAXBUFFSIZE];
struct sockaddr_in servaddr;
sockfd=socket(AF_INET,SOCK_STREAM,0);
if(sockfd<0)
{
printf("Socket created failed.\n");
return -1;
}
servaddr.sin_family=AF_INET;
servaddr.sin_port=htons(PORT);
servaddr.sin_addr.s_addr=inet_addr(HOST_ADDR);
printf(" connecting...\n");
if(connect(sockfd,(struct sockaddr *)&servaddr,sizeof(servaddr))<0)
{
printf("Connect server failed.\n");
return -1;
}
else {printf(" Connect server success.\n");}
while(1)
{
n=read(sockfd,recvbuff,MAXBUFFSIZE);
if(n>0)
{
write(fd_net_syn,recvbuff,n);
printf("the receive data is:%s\nthe byte=%d\n",recvbuff,n);}
}
return 0;
}
code]这样传输后,第一个arm板到第二个arm板传输文件就非常的慢,不知道为什么?