- 论坛徽章:
- 0
|
如题,以下是我的测试源码,当连上之后服务端向客户端发信,客户端收信成功,可是返过来为什么不行了呢,找过很多资料,真的不行了,请大家帮忙:
server.c:
#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>
#define MYPORT 3490 /* the port users will be connecting to */
#define BACKLOG 10 /* how many pending connections queue will hold */
main()
{
int sockfd, new_fd,new_fd2; /* listen on sock_fd, new connection on new_fd */
struct sockaddr_in my_addr; /* my address information */
struct sockaddr_in their_addr; /* connector's address information */
unsigned long sin_size;
int numbytes;
char buf[100];
fd_set readfsd; /* 検査ディスクリプタ指定 */
if ((sockfd = socket(AF_INET, SOCK_STREAM, 0 )) == -1) {
perror("socket" ;
exit(1);
}
my_addr.sin_family = AF_INET; /* host byte order */
my_addr.sin_port = htons(MYPORT ); /* short, network byte order */
my_addr.sin_addr.s_addr = INADDR_ANY; /* auto-fill with my IP */
bzero(&(my_addr.sin_zero), 8 ); /* zero the rest of the struct */
if (bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr)) == -1) {
perror("bind" ;
exit(1);
}
if (listen(sockfd, BACKLOG) == -1) {
perror("listen" ;
exit(1);
}
sin_size = sizeof(struct sockaddr_in);
if ((new_fd = accept(sockfd, (struct sockaddr *)&their_addr, &sin_size)) == -1) {
perror("accept" ;
}
printf("server: got connection from %s\n", inet_ntoa(their_addr.sin_addr));
if (write(new_fd, "Hello, world!\n", 100) == -1) {
perror("send" ;
}
while(1) {
FD_ZERO( &readfsd );
/* #01 Update Start */
FD_SET( new_fd, &readfsd );
printf("is reading....\n" ;
if (select(new_fd+1, &readfsd, NULL, NULL, NULL))
{
if ((numbytes=read(new_fd, buf, 100)) == -1) {
perror("recv" ;
printf("the recv is error" ;
} else {
buf[numbytes] = '\0';
printf("Received2: %s",buf);
if (write(new_fd, buf, 14, 0) == -1)
perror("send" ;
}
}
}
}
clint.c:
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <netdb.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#define PORT 3490 /* the port client will be connecting to */
#define MAXDATASIZE 100 /* max number of bytes we can get at once */
int main(int argc, char *argv[]) {
int sockfd, numbytes;
char buf[MAXDATASIZE];
struct hostent *he;
struct sockaddr_in their_addr; /* connector's address information */
if (argc != 2) {
fprintf(stderr,"usage: client hostname\n" ;
exit(1);
}
if ((he=gethostbyname(argv[1])) == NULL) { /* get the host info */
herror("gethostbyname");
exit(1);
}
if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
perror("socket");
exit(1);
}
their_addr.sin_family = AF_INET; /* host byte order */
their_addr.sin_port = htons(PORT); /* short, network byte order */
their_addr.sin_addr = *((struct in_addr *)he->h_addr);
bzero(&(their_addr.sin_zero), ; /* zero the rest of the struct */
if (connect(sockfd, (struct sockaddr *)&their_addr, sizeof(struct sockaddr)) == -1) {
perror("connect");
exit(1);
}
if ((numbytes=read(sockfd, buf, MAXDATASIZE)) == -1) {
perror("recv");
exit(1);
} else {
buf[numbytes] = '\0';
printf("-Received: %s----------\n",buf);
fflush(stdout);
}
while(1) {
printf("please input send message\n");
scanf("%s", buf);
if (write(sockfd, buf, sizeof(buf)) == -1) {
perror("send");
} else {
printf("now is read...");
if ((numbytes=read(sockfd, buf, MAXDATASIZE)) == -1) {
perror("recv");
exit(1);
} else {
buf[numbytes] = '\0';
printf("Received: %s",buf);
}
}
}
close(sockfd);
return 0;
}
以上程序在AIX上做编写.请各牛人指点错误,非常感谢.
[ 本帖最后由 jist12321 于 2007-4-24 20:00 编辑 ] |
|