当前位置: 技术问答>linux和unix
一个简单的服务器 客户端代码 请高手看下 在线等
来源: 互联网 发布时间:2016-03-13
本文导语: 一个TCP的服务器和客户端代码 不知道怎么搞的 编译能通过 但是当Server端运行的时候 启动client端 两边都没有反应 都在等待中 然后如果停掉server端 client端才打印出plz enter msg: 这句 请高手帮忙看一下 到底错误...
一个TCP的服务器和客户端代码
不知道怎么搞的 编译能通过 但是当Server端运行的时候 启动client端 两边都没有反应 都在等待中
然后如果停掉server端 client端才打印出plz enter msg: 这句
请高手帮忙看一下 到底错误在那里 谢谢了
/* client 端 */
#include
#include
#include
#include
#include
#include
#include
#define PORT 1234
#define MAXDATASIZE 100
int main(int argc,char* argv[])
{
int sockfd;
int num;
char buffer[MAXDATASIZE];
struct hostent *he;
struct socket_in server;
/*从命令行获取服务器端程序*/
/*struct hostent* gethostbyname(const char* hostname )*/
if (NULL==(he=gethostbyname(argv[1])))
//struct hostent 结构详见/usr/include/netdb.h
{
*/ 输出出错信息;*/
printf("host error !");
exit(1);
}
/*建立套接字*/
if (-1==(sockfd=socket(AF_INET,SOCK_STREAM,0)))
{
*/ 输出出错信息;*/
printf("socket error !");
exit(1);
}
/*连接服务器*/
bzero(&server,sizeof(struct sockaddr));
server.sin_family=AF_INET;
server.sin_port=htons(PORT);
server.sin_addr.s_addr=*((struct in_addr*)he->h_addr);
if (-1==connect(sockfd,(struct sockaddr*)server,sizeof(strcut sockaddr)))
{
*/ 输出出错信息;*/
printf("connent error !");
close(sockfd);
exit(1);
}
if (-1==(num=recv(sockfd,buf,MAXDATASIZE,0)))
{
/* 报错;*/
printf("receive error !");
close(sockfd);
exit(1);
}
printf("plz enter msg:");
bzero(buffer,MAXDATASIZE);
fgets(buffer,MAXDATASIZE,stdin);
num=write(sockfd,buffer,MAXDATASIZE);
bzero(buffer,MAXDATASIZE);
num=read(sockfd,buffer,MAXDATASIZE);
printf("server msg :%s",buffer);
close(sockfd);
}
/*TCP服务器端程序模板*/
#include
#include
#include
#include
#include
#include
#include
#define PORT 1234
#define MAXDATASIZE 100
#define backlog 5
int main()
{
int listenfd;
int connectfd;
struct sockaddr_in server;
struct sockadd_in client;
char buffer[MAXDATASIZE];
int sin_size;
/*建立套接字*/
if(-1==(listenfd=(socket(AF_INET,SOCK_STREAM,0))))
{
/* 输出错误信息;*/
printf("socket error !");
exit(1);
}
/*绑定服务端端口*/
bzero(&server,sizeof(struct sockaddr));
server.sin_family=AF_INET;
server.sin_port=htons(PORT);
server.sin_addr.s_addr=htonl(INADDR_ANY);
if (-1==bind(listenfd,(struct sockaddr*)&server,sizeof(struct sockaddr)))
{
/* 输出出错信息;*/
printf("bind error !");
close(listenfd);
exit(1);
}
/*侦听绑定的端口*/
if (-1==listen(listenfd,backlog))
{
/* 输出出错信息;*/
printf("listen error !");
close(listenfd);
exit(1);
}
/*接受用户的请求*/
sin_size=sizeof(struct sockaddr);
if (-1==(connectfd=accept(listenfd,(strcut sockaddr*)&client,&sin_size)))
{
/* 输出出错信息;*/
printf("connect error !");
close(connectfd);
exit(1);
}
while(1)
{
/* 调用send、recv、read与write收发数据 */
connectfd=accept(listenfd,(strcut sockaddr*)&client,&sin_size);
bzero(buffer,MAXDATASIZE);
read(connectfd,buffer,MAXDATASIZE);
int ret =recv(connectfd,buffer,sizeof(buffer),0);
printf("server received %d bytes:%s",ret,buffer);
send(listenfd,"welcome !";sizeof("welcome !"),0) ;
write(connectfd,"welcome !";sizeof("welcome !"));
}
close(listenfd);
close(connectfd);
}
不知道怎么搞的 编译能通过 但是当Server端运行的时候 启动client端 两边都没有反应 都在等待中
然后如果停掉server端 client端才打印出plz enter msg: 这句
请高手帮忙看一下 到底错误在那里 谢谢了
/* client 端 */
#include
#include
#include
#include
#include
#include
#include
#define PORT 1234
#define MAXDATASIZE 100
int main(int argc,char* argv[])
{
int sockfd;
int num;
char buffer[MAXDATASIZE];
struct hostent *he;
struct socket_in server;
/*从命令行获取服务器端程序*/
/*struct hostent* gethostbyname(const char* hostname )*/
if (NULL==(he=gethostbyname(argv[1])))
//struct hostent 结构详见/usr/include/netdb.h
{
*/ 输出出错信息;*/
printf("host error !");
exit(1);
}
/*建立套接字*/
if (-1==(sockfd=socket(AF_INET,SOCK_STREAM,0)))
{
*/ 输出出错信息;*/
printf("socket error !");
exit(1);
}
/*连接服务器*/
bzero(&server,sizeof(struct sockaddr));
server.sin_family=AF_INET;
server.sin_port=htons(PORT);
server.sin_addr.s_addr=*((struct in_addr*)he->h_addr);
if (-1==connect(sockfd,(struct sockaddr*)server,sizeof(strcut sockaddr)))
{
*/ 输出出错信息;*/
printf("connent error !");
close(sockfd);
exit(1);
}
if (-1==(num=recv(sockfd,buf,MAXDATASIZE,0)))
{
/* 报错;*/
printf("receive error !");
close(sockfd);
exit(1);
}
printf("plz enter msg:");
bzero(buffer,MAXDATASIZE);
fgets(buffer,MAXDATASIZE,stdin);
num=write(sockfd,buffer,MAXDATASIZE);
bzero(buffer,MAXDATASIZE);
num=read(sockfd,buffer,MAXDATASIZE);
printf("server msg :%s",buffer);
close(sockfd);
}
/*TCP服务器端程序模板*/
#include
#include
#include
#include
#include
#include
#include
#define PORT 1234
#define MAXDATASIZE 100
#define backlog 5
int main()
{
int listenfd;
int connectfd;
struct sockaddr_in server;
struct sockadd_in client;
char buffer[MAXDATASIZE];
int sin_size;
/*建立套接字*/
if(-1==(listenfd=(socket(AF_INET,SOCK_STREAM,0))))
{
/* 输出错误信息;*/
printf("socket error !");
exit(1);
}
/*绑定服务端端口*/
bzero(&server,sizeof(struct sockaddr));
server.sin_family=AF_INET;
server.sin_port=htons(PORT);
server.sin_addr.s_addr=htonl(INADDR_ANY);
if (-1==bind(listenfd,(struct sockaddr*)&server,sizeof(struct sockaddr)))
{
/* 输出出错信息;*/
printf("bind error !");
close(listenfd);
exit(1);
}
/*侦听绑定的端口*/
if (-1==listen(listenfd,backlog))
{
/* 输出出错信息;*/
printf("listen error !");
close(listenfd);
exit(1);
}
/*接受用户的请求*/
sin_size=sizeof(struct sockaddr);
if (-1==(connectfd=accept(listenfd,(strcut sockaddr*)&client,&sin_size)))
{
/* 输出出错信息;*/
printf("connect error !");
close(connectfd);
exit(1);
}
while(1)
{
/* 调用send、recv、read与write收发数据 */
connectfd=accept(listenfd,(strcut sockaddr*)&client,&sin_size);
bzero(buffer,MAXDATASIZE);
read(connectfd,buffer,MAXDATASIZE);
int ret =recv(connectfd,buffer,sizeof(buffer),0);
printf("server received %d bytes:%s",ret,buffer);
send(listenfd,"welcome !";sizeof("welcome !"),0) ;
write(connectfd,"welcome !";sizeof("welcome !"));
}
close(listenfd);
close(connectfd);
}
|
我写了个 模板,楼主你自己对照看吧 ubnutn7.10 gcc4.1 测试没 问题的
/**************************
server
***************************/
#include
#include
#include
#include
#include
#include
#define SERVER_PORT 2000
#define LENGTH_OF_LISTEN_QUEUE 10
#define BUFFER_SIZE 2048
int main(int argc, char *argv[])
{
int servfd,clifd;
struct sockaddr_in servaddr,cliaddr;
char buf[BUFFER_SIZE];
/*创建套接字号,地址族,套接字类型,传输协议*/
if ((servfd = socket(AF_INET,SOCK_STREAM,0))
/**************************
server
***************************/
#include
#include
#include
#include
#include
#include
#define SERVER_PORT 2000
#define LENGTH_OF_LISTEN_QUEUE 10
#define BUFFER_SIZE 2048
int main(int argc, char *argv[])
{
int servfd,clifd;
struct sockaddr_in servaddr,cliaddr;
char buf[BUFFER_SIZE];
/*创建套接字号,地址族,套接字类型,传输协议*/
if ((servfd = socket(AF_INET,SOCK_STREAM,0))