tcp -udp 网络测试程序
(2011-01-13 17:49:56)
标签:
杂谈 |
分类: linux |
tcp 测试程序
#test.sh
#!/bin/sh
ls *.h *.c *.cpp | awk '{print $1}'
> file_total
cat file_total| while read file
do
# echo " " >>
$file
echo $file
cat $file | tr -d "\r" >
tempfile_$$_
mv tempfile_$$_ $file
done
rm file_total *~
chmod +x *.h *.cpp
g++ -g -Wall async-server.cpp -o server
g++ -g -Wall client.cpp -o client
//async-server.cpp
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/wait.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/time.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
int sockfd,
new_fd;
socklen_t len;
struct sockaddr_in
my_addr, their_addr;
unsigned int myport,
lisnum;
char buf[MAXBUF +
1];
fd_set rfds;
struct timeval tv;
int retval, maxfd =
-1;
if (argv[1])
myport = atoi(argv[1]);
else
myport = 7838;
if (argv[2])
lisnum = atoi(argv[2]);
else
lisnum = 2;
printf("useage : %s port
listennum ip\n",argv[0]);
if ((sockfd =
socket(PF_INET, SOCK_STREAM, 0)) == -1)
{
perror("socket");
exit(1);
}
bzero(&my_addr, sizeof(my_addr));
my_addr.sin_family =
AF_INET;
my_addr.sin_port =
htons(myport);
if (argv[3])
my_addr.sin_addr.s_addr =
inet_addr(argv[3]);
else
my_addr.sin_addr.s_addr =
htonl(INADDR_ANY);
char * some_addr =
inet_ntoa((struct
in_addr)my_addr.sin_addr);
strcpy(szIP,
some_addr);
if (bind(sockfd, (struct
sockaddr *) &my_addr, sizeof(struct
sockaddr))
==
-1)
{
perror("bind");
exit(1);
}
if (listen(sockfd,
lisnum) == -1)
{
perror("listen");
exit(1);
}
printf("%s listen %s
port %d \n",argv[0],szIP,myport);
while (1)
{
printf
("\n----wait for new connection for
chat....\n");
len = sizeof(struct sockaddr);
if ((new_fd =
accept(sockfd, (struct sockaddr *)
&their_addr,
&len)) ==
-1)
{
perror("accept");
exit(errno);
}
else
printf("server: got connection from %s, port %d, socket
%d\n",
inet_ntoa(their_addr.sin_addr),
ntohs(their_addr.sin_port), new_fd);
printf("\n ready,begin chat...,press enter to
send message to peer\n");
while (1)
{
FD_ZERO(&rfds);
FD_SET(0,
&rfds);
maxfd =
0;
FD_SET(new_fd, &rfds);
if (new_fd
> maxfd)
maxfd = new_fd;
tv.tv_sec
= 1;
tv.tv_usec
= 0;
retval =
select(maxfd + 1, &rfds, NULL, NULL,
&tv);
if (retval
== -1)
{
printf("will exit,select
error %s", strerror(errno));
break;
}
else if
(retval == 0)
{
continue;
}
else
{
if (FD_ISSET(0,
&rfds))
{
bzero(buf, MAXBUF + 1);
fgets(buf, MAXBUF, stdin);
if (!strncasecmp(buf, "quit", 4))
{
printf("self request to quit!\n");
break;
}
len = send(new_fd, buf, strlen(buf) - 1,
0);
if (len > 0)
printf
("message:
%s\tsend success, total %d bytes!\n",
buf, len);
else
{
printf
("message:
'%s' send failed, error code %d, error message '%s'\n",
buf, errno, strerror(errno));
break;
}
}
if (FD_ISSET(new_fd,
&rfds))
{
bzero(buf, MAXBUF + 1);
len = recv(new_fd, buf, MAXBUF, 0);
if (len > 0)
printf
("receive
message :'%s', total %d bytes\n",
buf, len);
else
{
if (len
< 0)
printf
("receive message failed!
error code %d, error message '%s'\n",
errno,
strerror(errno));
else
printf("peer quit,chat
stop\n");
break;
}
}
}
}
close(new_fd);
printf("still
chat?(no->quit)");
fflush(stdout);
bzero(buf, MAXBUF + 1);
fgets(buf, MAXBUF, stdin);
if (!strncasecmp(buf, "no", 2))
{
printf("stop chat!\n");
break;
}
}
close(sockfd);
return 0;
//client.cpp
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <sys/socket.h>
#include <resolv.h>
#include <stdlib.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <sys/time.h>
#include <sys/types.h>
#define MAXBUF 1024
int main(int argc, char **argv)
{
int sockfd,
len;
struct
sockaddr_in dest;
char
buffer[MAXBUF + 1];
fd_set
rfds;
struct
timeval tv;
int retval,
maxfd = -1;
if (argc !=
3)
{
printf
("参数格式错误!正确用法如下:\n\t\t%s IP地址 端口\n\t比如:\t%s 127.0.0.1 80\n此程序用来从某个
IP 地址的服务器某个端口接收最多 MAXBUF 个字节的消息 \n",
argv[0], argv[0]);
exit(0);
}
if ((sockfd
= socket(AF_INET, SOCK_STREAM, 0)) < 0)
{
perror("Socket");
exit(errno);
}
bzero(&dest, sizeof(dest));
dest.sin_family = AF_INET;
dest.sin_port = htons(atoi(argv[2]));
if
(inet_aton(argv[1], (struct in_addr *)
&dest.sin_addr.s_addr) == 0)
{
perror(argv[1]);
exit(errno);
}
if
(connect(sockfd, (struct sockaddr *) &dest,
sizeof(dest)) != 0)
{
perror("Connect ");
exit(errno);
}
printf
("\n准备就绪,可以开始聊天了……直接输入消息回车即可发信息给对方\n");
while
(1)
{
FD_ZERO(&rfds);
FD_SET(0, &rfds);
maxfd = 0;
FD_SET(sockfd, &rfds);
if (sockfd > maxfd)
maxfd = sockfd;
tv.tv_sec = 1;
#test.sh
#!/bin/sh
ls *.h *.c *.cpp
cat file_total| while read file
do
#
done
rm file_total *~
chmod +x *.h *.cpp
g++ -g -Wall async-server.cpp -o server
g++ -g -Wall client.cpp -o client
//async-server.cpp
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/wait.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/time.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#define MAXBUF 1024
char szIP[255];
int main(int argc, char **argv)
{
}
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <sys/socket.h>
#include <resolv.h>
#include <stdlib.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <sys/time.h>
#include <sys/types.h>
#define MAXBUF 1024
int main(int argc, char **argv)
{