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)
;
}
}
}
}
----------------------------------
1万+

被折叠的 条评论
为什么被折叠?



