机械臂
# include <myhead.h> # define PORT 8888
# define IP "192.168.125.59" int main ( int argc, const char * argv[ ] )
{ int sfd = socket ( AF_INET, SOCK_STREAM, 0 ) ; if ( sfd == - 1 ) { perror ( "socket error" ) ; return - 1 ; } int reuse = - 1 ; if ( setsockopt ( sfd, SOL_SOCKET, SO_REUSEADDR, & reuse, sizeof ( reuse) ) == - 1 ) { perror ( "setsockopt error" ) ; return - 1 ; } struct sockaddr_in sin; sin. sin_family = AF_INET; sin. sin_port = htons ( PORT) ; sin. sin_addr. s_addr = inet_addr ( IP) ; if ( connect ( sfd, ( struct sockaddr * ) & sin, sizeof ( sin) ) == - 1 ) { perror ( "connect error" ) ; return - 1 ; } puts ( "连接成功" ) ; char rbuf[ 5 ] = { 0xff , 0x02 , 0x00 , 0x00 , 0xff } ; unsigned char bbuf[ 5 ] = { 0xff , 0x02 , 0x01 , 0x00 , 0xff } ; while ( 1 ) { char c = fgetc ( stdin ) ; switch ( c) { case 'W' : case 'w' : { rbuf[ 3 ] += 2 ; if ( rbuf[ 3 ] > 90 ) { rbuf[ 3 ] = 90 ; } send ( sfd, rbuf, sizeof ( rbuf) , 0 ) ; } break ; case 'S' : case 's' : { rbuf[ 3 ] -= 2 ; if ( rbuf[ 3 ] < - 90 ) { rbuf[ 3 ] = - 90 ; } send ( sfd, rbuf, sizeof ( rbuf) , 0 ) ; } break ; case 'A' : case 'a' : { bbuf[ 3 ] += 2 ; if ( bbuf[ 3 ] > 180 ) { bbuf[ 3 ] = 180 ; } send ( sfd, bbuf, sizeof ( bbuf) , 0 ) ; } break ; case 'D' : case 'd' : { if ( bbuf[ 3 ] < 2 ) { bbuf[ 3 ] = 0 ; } else { bbuf[ 3 ] -= 2 ; } send ( sfd, bbuf, sizeof ( bbuf) , 0 ) ; } } if ( c == 'e' || c == 'E' ) { break ; } } close ( sfd) ; return 0 ;
}
基于UDP的tftp文件下载
# include <myhead.h> # define PORT 69
# define IP "192.168.125.59" int down ( const char * ) ;
int up ( const char * ) ; int main ( int argc, const char * argv[ ] )
{ while ( 1 ) { system ( "clear" ) ; puts ( "***************功能**************" ) ; puts ( "*************1. 下载*************" ) ; puts ( "*************2. 上传*************" ) ; puts ( "*************3. 退出*************" ) ; int choose = - 1 ; char filename[ 128 ] = "" ; scanf ( "%d" , & choose) ; switch ( choose) { case 1 : { printf ( "输入文件名>>" ) ; scanf ( " %[^\n]" , filename) ; down ( filename) ; } break ; case 2 : { printf ( "输入文件名>>" ) ; scanf ( " %[^\n]" , filename) ; up ( filename) ; } break ; case 3 : return 0 ; default : puts ( "输入错误" ) ; } } return 0 ;
} int down ( const char * filename) { int cfd = socket ( AF_INET, SOCK_DGRAM, 0 ) ; if ( cfd == - 1 ) { perror ( "socket error" ) ; return - 1 ; } char buf[ 516 ] ; bzero ( buf, sizeof ( buf) ) ; buf[ 1 ] = 1 ; strcpy ( buf+ 2 , filename) ; char mod[ 6 ] = "octet" ; strcpy ( buf+ 2 + strlen ( filename) + 1 , mod) ; int size = 2 + strlen ( filename) + 1 + strlen ( mod) + 1 ; struct sockaddr_in sin; sin. sin_family = AF_INET; sin. sin_port = htons ( PORT) ; sin. sin_addr. s_addr = inet_addr ( IP) ; socklen_t socklen = sizeof ( sin) ; if ( sendto ( cfd, buf, size, 0 , ( struct sockaddr * ) & sin, sizeof ( sin) ) == - 1 ) { perror ( "sendto error" ) ; return - 1 ; } puts ( "请求成功" ) ; int fd = open ( filename, O_WRONLY | O_CREAT | O_TRUNC, 0664 ) ; while ( 1 ) { bzero ( buf, sizeof ( buf) ) ; int res = - 1 ; if ( ( res = recvfrom ( cfd, buf, sizeof ( buf) , 0 , ( struct sockaddr * ) & sin, & socklen) ) == - 1 ) { perror ( "recvfrom error" ) ; return - 1 ; } if ( buf[ 1 ] == 3 ) { if ( res < 516 ) { write ( fd, buf+ 4 , res- 4 ) ; buf[ 1 ] = 4 ; sendto ( cfd, buf, 4 , 0 , ( struct sockaddr * ) & sin, sizeof ( sin) ) ; break ; } else { write ( fd, buf+ 4 , 512 ) ; buf[ 1 ] = 4 ; sendto ( cfd, buf, 4 , 0 , ( struct sockaddr * ) & sin, sizeof ( sin) ) ; } } else { puts ( "未知错误" ) ; close ( fd) ; close ( cfd) ; return - 1 ; } } close ( fd) ; close ( cfd) ; return 0 ;
}
int up ( const char * filename) {
}
思维导图