TCP编程的服务器端一般步骤是:
1、创建一个socket,用函数socket(); 2、设置socket属性,用函数setsockopt(); * 可选 3、绑定IP地址、端口等信息到socket上,用函数bind(); 4、开启监听,用函数listen(); 5、接收客户端上来的连接,用函数accept(); 6、收发数据,用函数send()和recv(),或者read()和write(); 7、关闭网络连接; 8、关闭监听; |
TCP编程的客户端一般步骤是:
1、创建一个socket,用函数socket(); 2、设置socket属性,用函数setsockopt();* 可选 3、绑定IP地址、端口等信息到socket上,用函数bind();* 可选 4、设置要连接的对方的IP地址和端口等属性; 5、连接服务器,用函数connect(); 6、收发数据,用函数send()和recv(),或者read()和write(); 7、关闭网络连接; |
与之对应的UDP编程步骤要简单许多,分别如下:
UDP编程的服务器端一般步骤是:
1、创建一个socket,用函数socket(); 2、设置socket属性,用函数setsockopt();* 可选 3、绑定IP地址、端口等信息到socket上,用函数bind(); 4、循环接收数据,用函数recvfrom(); 5、关闭网络连接; |
UDP编程的客户端一般步骤是:
1、创建一个socket,用函数socket();
2、设置socket属性,用函数setsockopt();* 可选
3、绑定IP地址、端口等信息到socket上,用函数bind();* 可选
4、设置对方的IP地址和端口等属性;
5、发送数据,用函数sendto();
6、关闭网络连接;
--------------------------------
附:Linux网络编程同时支持tcp/udp的服务端简短程序
int main(int argc,char **argv){
int ld,sd,udp;
struct sockaddr_in skaddr
int length;
fd_set fd;
int max ;
int n;
char buff[ 1000] ;
/*-----------------tcp---------------*/
if ( ( ld = socket ( PF_INET , SOCK_STREAM , 0 ) ) < 0) {
perror ( "Problem creating socket/n" ) ;
exit ( 1) ;
}
skaddr. sin_family = AF_INET ;
skaddr. sin_addr. s_addr = htonl ( INADDR_ANY ) ;
skaddr. sin_port = htons ( atoi ( argv[ 1] ) ) ;
if ( bind ( ld, ( struct sockaddr * ) & skaddr, sizeof ( skaddr) ) < 0) {
perror ( "Problem binding/n" ) ;
exit ( 0) ;
}
if ( listen ( ld, 5) < 0 ) {
perror ( "Error calling listen/n" ) ;
exit ( 1) ;
}
/*---------------------udp-----------------*/
if ( ( udp = socket ( PF_INET , SOCK_DGRAM , 0 ) ) < 0) {
printf ( "Problem creating socket/n" ) ; exit ( 1) ;
}
if ( bind ( udp, ( struct sockaddr * ) & skaddr, sizeof ( skaddr) ) < 0) {
printf ( "Problem binding/n" ) ;
exit ( 0) ;
}
max = ( ld > udp ? ld : udp) ;
while ( 1) {
/* Inialize the fd_set */
FD_ZERO( & fd) ;
FD_SET( ld, & fd) ; /* add passive tcp socket */
FD_SET( udp, & fd) ; /* add udp socket */
/*--------------select--------------*/
/* call select */
if ( select ( max + 1, & fd, NULL , NULL , NULL ) < 0) {
perror ( "select problem" ) ;
exit ( 1) ;
}
/*判断如果是tcp的socket执行那些操作*/
if ( FD_ISSET( ld, & fd) ) {
if ( ( sd = accept ( ld, ( struct sockaddr * ) & skaddr, & length) ) < 0) {
perror ( "accept problem" ) ;
exit ( 1) ;
}
while ( n = read ( sd, buff, 1000) ) {
if ( write ( sd, buff, n) < 0)
break ;
}
close ( sd) ;
}
/*判断如果是udp的socket执行那些操作*/
if ( FD_ISSET( udp, & fd) ) {
/* read a datagram from the socket (put result in bufin) */
n= recvfrom ( udp, buff, 1000, 0, ( struct sockaddr * ) & skaddr, & length) ;
if ( n< 0) {
perror ( "Error receiving data" ) ;
} else {
/* Got something, just send it back */
sendto ( udp, buff, n, 0, ( struct sockaddr * ) & skaddr, length) ;
}
}
}
}
----------------------------------