- 論壇徽章:
- 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 //最大鏈接數(shù)
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) //向請求方發(fā)送消息
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){ //接收服務器端發(fā)送的信息
perror("receve error!" ;
exit(1);
}
//顯示收到的信息
buf[recvbytes] = '\0';
printf("receve:%s",buf);
close(sockfd);
}
在一個終端運行服務器程序后,在另外一個終端運行客戶端程序8-2 127.0.0.1
出現(xiàn)connect error!: Socket operation on non-socket錯誤,請大家?guī)兔鉀Q下 謝謝
那個笑臉不知道怎么去掉了
[ 本帖最后由 sydnash 于 2008-11-10 19:23 編輯 ] |
|