客户端源码
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <netdb.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
int main(int argc,char*argv)
{
int sockfd,numbytes;
char buf[100];
struct hostent*he;
struct sockaddr_in their_addr;
int i=0;
he = gethostbyname(argv[1]);
if ((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)
{
perror("socket");
exit(1);
}
their_addr.sin_family=AF_INET;
their_addr.sin_port=htons(2323);
their_addr.sin_addr=*((struct in_addr*) he->h_addr);
bzero(&(their_addr.sin_zero),8);
if (connect(sockfd,(struct sockaddr *)&their_addr,sizeof(struct sockaddr))==-1)
{
perror("connect");
exit(1);
}
if (send(sockfd,"hello!",6,0)==-1)
{
perror("send");
exit(1);
}
if ((numbytes=recv(sockfd,buf,100,0))==-1)
{
perror("recv");
exit(1);
}
buf[numbytes]='';
printf("result %s",buf);
close(sockfd);
return 0;
}
服务端源码
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <netdb.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/wait.h>
int main()
{
int sockfd,new_fd;
int numbytes;
struct sockaddr_in my_addr;
struct sockaddr_in their_addr;
int sin_size;
if ((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)
{
perror("socket");
exit(1);
}
my_addr.sin_family=AF_INET;
my_addr.sin_port=htons(2323);
my_addr.sin_addr.s_addr=INADDR_ANY;
bzero(&(their_addr.sin_zero),8);
if (bind(sockfd,(struct sockaddr*)&my_addr,sizeof(struct sockaddr))==-1)
{
perror("bind");
exit(1);
}
if (listen(sockfd,10)==-1)
{
perror("listen");
exit(1);
}
while(1)
{
sin_size=sizeof(struct sockaddr_in);
perror("server is run");
if ((new_fd=accept(sockfd,(struct sockaddr*)&their_addr,&sin_size))==-1)
{
perror("accept");
exit(1);
}
if (!fork())
{
if (send(new_fd,"hello,world!",14,0)==-1)
{
perror("send");
close(new_fd);
exit(0);
}
}
close(new_fd);
}
close(sockfd);
}
分别在客户端和服务器段采用gcc编译
如果不慎终止了服务器进程
lsof -i : 1234 其中1234为端口号
kill -9 6668 其中6668为进程pid