?? scoket.txt
字號:
/*服務器程序*/
#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,rval,i,n;
socklen_t len,length;
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 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;
}
/*客戶機程序*/
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc,char*argv[])
{
int sock,i,n;
char c,data[1024];
struct sockaddr_in serveraddr;
struct hostent *host;
if(argc<3)
{
printf("Usage:%s\n",argv[0]);
exit(1);
}
host=gethostbyname(argv[1]);
if(host==NULL)
{
printf("get hostname error.\n");
exit(1);
}
sock=socket(AF_INET,SOCK_STREAM,0);
if(sock==-1)
{
printf("creat sock error.\n");
exit(1);
}
memset(&serveraddr,0,sizeof(serveraddr));
serveraddr.sin_family=AF_INET;
//serveraddr.sin_addr=*((struct in_addr*)host->h_addr);
serveraddr.sin_port=htons(atoi(argv[2]));
memcpy((char*)&serveraddr.sin_addr,(char*)host->h_addr,host->h_length);
n=connect(sock,(struct sockaddr*)&serveraddr,sizeof(struct sockaddr));
if(n==-1)
{
printf("conect error.\n");
exit(1);
}
printf("服務器地址:%s 端口:%d\n",inet_ntoa(serveraddr.sin_addr),ntohs(serveraddr.sin_port));
while(1)
{
printf("發送:");
memset(data,0,1024);
i=0;
c=getchar();
while(c!='\n')
{
data=c;
i++;
}
data='\0';
if(send(sock,data,sizeof(data),0)==-1)
{
printf("send msg error.\n");
exit(1);
}
if(recv(sock,data,1024,0))
printf("消息%s\n",data);
}
return 0;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -