- 论坛徽章:
- 0
|
//服务器程序
#include<sys/socket.h>
#include<sys/types.h>
#include<stdio.h>
#include<string.h>
#include<errno.h>
#include<stdlib.h>
#include<errno.h>
#include<sys/wait.h>
#include<netinet/in.h>
#define SERVPORT 128 //端口号
#define BACKLOG 10 //最大链接数
typedef struct sockaddr_in st;
typedef struct sockaddr sd;
int main()
{
int sockfd,clientfd;
st my_adder;
st client_adder;
int sin_size;
if((sockfd = socket(AF_INET,SOCK_STREAM,0)) == -1) //获取描诉符
{perror("socket default!" ;
exit(1);
}
printf("%d",sockfd);
my_adder.sin_family = AF_INET;
my_adder.sin_port = htons(SERVPORT);
my_adder.sin_addr.s_addr = INADDR_ANY;
bzero(&(my_adder.sin_zero), ;
if(bind(sockfd,(sd *) &my_adder,sizeof(sd)) == -1) //绑定到端口
{perror("bind error!" ;
exit(1);
}
if(listen(sockfd,BACKLOG) == -1){ //侦听请求信息
perror("linsten error" ;
exit(1);
}
while(1){
sin_size = sizeof(st);
if((clientfd = accept(sockfd,(sd *)&client_adder,&sin_size)) == -1){ //接受与请求方建立链接
perror("accept error!" ;
continue;
}
printf("accept a meg from:%s\n",inet_ntoa(client_adder.sin_addr));
if(!fork()){
if(send(clientfd,"connect\n",26,0) == -1) //向请求方发送消息
perror("send error!" ;
close(clientfd);
exit(0);
}
close(clientfd);
}
}
//客户端程序
#include<sys/socket.h>
#include<sys/types.h>
#include<stdio.h>
#include<netdb.h>
#include<errno.h>
#include<string.h>
#include<stdlib.h>
#include<sys/wait.h>
#include<netinet/in.h>
typedef struct sockaddr_in st;
typedef struct sockaddr sd;
#define SERVPORT 128
#define MAXDATASIZE 100
int main(int argc,char *argv[])
{
int sockfd,recvbytes;
char buf[MAXDATASIZE];
struct hostent *host;
st servaddr;
if(argc<2){
fprintf(stdin,"please enter the sercer's hostname!\n" ;
exit(1);
}
if((host = gethostbyname(argv[1])) == NULL){
perror("gethostbyname error!" ;
exit(1);
}
if (sockfd = socket(AF_INET,SOCK_STREAM,0) == -1){
perror("socket creat error!" ;
exit(1);
}
//建立服务器端信息
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(SERVPORT);
servaddr.sin_addr = *((struct in_addr *)host->h_addr);
//inet_pton( AF_INET, "127.0.0.3", &servaddr.sin_addr );
bzero(&(servaddr.sin_zero), ;
if (connect(sockfd,(sd *)&servaddr,sizeof(sd)) == -1){ //请求与服务器建立链接
perror("connect error!" ;
exit(1);
}
if((recvbytes = recv(sockfd,buf,MAXDATASIZE,0)) == -1){ //接收服务器端发送的信息
perror("receve error!" ;
exit(1);
}
//显示收到的信息
buf[recvbytes] = '\0';
printf("receve:%s",buf);
close(sockfd);
}
在一个终端运行服务器程序后,在另外一个终端运行客户端程序8-2 127.0.0.1
出现connect error!: Socket operation on non-socket错误,请大家帮忙解决下 谢谢
那个笑脸不知道怎么去掉了
[ 本帖最后由 sydnash 于 2008-11-10 19:23 编辑 ] |
|