机械臂
# 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) {
}
思维导图