- 论坛徽章:
- 0
|
客户端:
#include "webapp.h"
int main(int argc,char *argv[])
{
int skfd;
struct sockaddr_in skaddr = {0};
char skptr[]= {"Hello Server\n"};
if(argc != 3)//app ip port
return -1;
skaddr.sin_family = AF_INET;
inet_aton(argv[1],&skaddr.sin_addr);
skaddr.sin_port = (unsigned short)atoi(argv[2]);
skfd = socket(AF_INET, SOCK_STREAM, 0);
if( skfd == -1 )
{
perror("socket error!!!");
return -1;
}
if( connect( skfd, (struct sockaddr *)&skaddr, sizeof(struct sockaddr) ) == -1 )
return -1;
while(1)
{
char sendptr[100] = {"ComeFromClient:"};
char getptr[100] = {0};
// if( fgets(sendptr + strlen("ComeFromClient:"), 80, stdin) != NULL);
// {
// write( skfd, sendptr, sizeof(sendptr) );
// }
if( read(STDIN_FILENO, sendptr + strlen("ComeFromClient:"), sizeof(sendptr)) != 0 )
{
write(skfd, sendptr, sizeof(sendptr));
}
// printf("\n");
if( read(skfd, getptr, sizeof(getptr)) != 0 )
{
// fputs(getptr,stdout);
// printf("%s",getptr);
write(STDOUT_FILENO, getptr, sizeof(getptr));
}
usleep(1);
}
close(skfd);
return 0;
}
服务器端:
#include "webapp.h"
int main(int argc, char *argv[])
{
int skfd;
struct sockaddr_in skaddr;
skfd = socket( AF_INET, SOCK_STREAM, 0 );
if( skfd == -1 )
{
perror("socket error");
return -1;
}
skaddr.sin_family = AF_INET;
skaddr.sin_addr.s_addr = htonl(INADDR_ANY);
skaddr.sin_port = (unsigned short)atoi(argv[1]);
if( bind(skfd, (struct sockaddr *)&skaddr, sizeof(struct sockaddr)) == -1 )
{
perror("bind error");
return -1;
}
if( listen(skfd, 1024 ) == -1 )
{
perror("listen error");
return -1;
}
while(1)
{
char sendptr[100] = {"ComeFromServer:"};
char getptr[100] = {0};
int addrlen = sizeof(struct sockaddr);
int connfd = accept(skfd, (struct sockaddr *)&skaddr, &addrlen );
while(1)
{
if(read( connfd, getptr, 100) != 0)
{
write(STDOUT_FILENO, getptr, sizeof(getptr));
// printf("%s",getptr);
}
// printf("\n");
// if( fgets(sendptr + strlen("ComeFromServer:"), 80, stdin) != NULL )
// {
// write(connfd, sendptr, sizeof(sendptr));
// }
if( read(STDIN_FILENO, sendptr + strlen("ComeFromServer:"),sizeof(sendptr)) != 0)
{
write(connfd, sendptr, sizeof(sendptr));
}
usleep(1);
}
close( connfd );
}
return 0;
}
问题时为什么客户端连续发送多次,在服务器端只显示第一次发送的内容;反过来也一样.不知是不是缓冲区的问题,怎么解决.如果只有客户端向服务器发数据时可行的。 |
|