- 论坛徽章:
- 0
|
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <string.h>
#include <stdlib.h>
#include <netdb.h>
int main()
{
int sock,msgsock,len,length,rval,i,n;
char buf[1024],data[1024],c;
struct sockaddr_in serveraddr;
struct sockaddr_in clintaddr;
struct hostent*host;
char host_name[256];
n=gethostname(host_name,256);
host=gethostbyname(host_name);
if(host!=NULL)
{
for(i=0;host->h_addr_list!=NULL;i++)
{
memset(&serveraddr,0,sizeof(serveraddr));
memcpy(&serveraddr.sin_addr.s_addr,host->h_addr_list,host->h_length);
printf("本机地址:%s\n",inet_ntoa(serveraddr.sin_addr));
}
}
sock=socket(AF_INET,SOCK_STREAM,0);
if(sock==-1)
{
printf("creat socket error.\n");
exit(1);
}
memset(&serveraddr,0,sizeof(struct sockaddr_in));
serveraddr.sin_family=AF_INET;
serveraddr.sin_port=INADDR_ANY;
if(bind(sock,(struct sockaddr*)&serveraddr,sizeof(struct sockaddr))==-1)
{
printf("bind error.\n");
exit(1);
}
len=sizeof(struct sockaddr_in);
if(getsockname(sock,(struct sockaddr*)&serveraddr,&len)<0)
{
printf("get sockname error.\n");
exit(1);
}
printf("listening port:%d\n",ntohs(serveraddr.sin_port));
listen(sock,5);
while(1)
{
length=sizeof(struct sockaddr_in);
msgsock=accept(sock,(struct sockaddr*)&clintaddr,&length);
if(msgsock=-1)
{
printf("accept msg error.\n");
exit(1);
}
printf("客户端地址:%s\n",inet_ntoa(clintaddr.sin_addr));
while(1)
{
memset(buf,0,1024);
rval=recv(msgsock,buf,1024,0);
if(rval<0)
{
printf("recv error.\n");
exit(1);
}
if(rval==0)
{
printf("end connecting.\n");
close(msgsock);
}
else printf("消息:%s\n",buf);
printf("发送:");
memset(data,0,1024);
i=0;
c=getchar();
while(c!='\n')
{
data=c;
i++;
}
data='\0';
send(msgsock,data,sizeof(data),0);
}
close(msgsock);
}
return 0;
}
这是服务器的程序. |
|