linux socket 网络编程入门

来源:互联网 发布:广联达园林预算软件 编辑:程序博客网 时间:2024/05/23 14:47

客户端源码

#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

 

原创粉丝点击