BUTTERSCOTCH

导航

Linux网络程序设计之基于TCP协议

基于TCP协议实现服务器程序和客户端程序,要求:

服务器程序等待客户端连接,建立连接后,打印客户端IP地址和端口到屏幕,打印客户端请求的内容到屏幕,统计客户端请求的字节数并发送给客户端;

客户端连接服务器,向服务器发送任意请求内容,接收服务器的相应内容,并打印到屏幕。

//服务器端
#include<stdio.h>
#include<sys/socket.h>
#include<netinet/in.h>

#define PORT 6666

int main()
{
    int sockfd;
    int new_fd;
    struct sockaddr_in server_addr;
    struct sockaddr_in client_addr;
    char buffer[1024];
    int nByte;
    int sin_size;
    //创建套接字 
    if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)
    {
        printf("create socket error!");
        exit(1);
    }
    //设置要绑定的变量 
    bzero(&server_addr,sizeof(struct sockaddr_in));
    server_addr.sin_family=AF_INET;
    server_addr.sin_port=htons(PORT);
    server_addr.sin_addr.s_addr=htonl(INADDR_ANY);
    //绑定地址 
    bind(sockfd,(struct sockaddr*)(&server_addr),sizeof(struct sockaddr));
    //监听端口
    listen(sockfd,5);
    
    while(1)
    {
        //等待连接
        sin_size=sizeof(struct sockaddr);
        new_fd=accept(sockfd,(struct sockaddr*)(&client_addr),&sin_size);
        printf("server get connection from %s:%d\n",inet_ntoa(client_addr.sin_addr),ntohs(client_addr.sin_port));
        
        //接收数据
        nByte=recv(new_fd,buffer,1024,0);
    
        char s[20];
        
        sprintf_s(s,"%d",nByte);s[19]='\0';        
        send(new_fd,s,strlen(s),0);
        close(new_fd);
         
         
     } 
     close(sock_fd);
     
     return 0;
 } 


//客户端
#include<stdio.h>
#include<string.h>
#include<sys/socket.h>
#include<netinet/in.h>

#define PORT 6666

int main()
{
    struct sockaddr_in server_addr;
    char buffer[128];
    //创建套接字
    int sockfd;
    if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)
    {
        printf("create socket error!");
        exit(1);
     } 
     //设置要连接的服务器的地址
     bzero(&server_addr,sizeof(struct sockaddr_in));
     server_addr.sin_family=AF_INET;
     server_addr.sin_port=htons(PORT);
     server_addr.sin_addr.s_addr=inet_addr("127.0.0.1");
     
     //连接服务器
      if(connnet(sockfd,(struct sockaddr*)(&server_addr),sizeof(struct sockaddr))==-1)
      {
          printf("connnet error!\n");
          exit(1);
          
       } 
       //发送数据到服务器
       printf("please input char:\n");
       fgets(buffer,128,stdin);
       send(sockfd,buffer,strlen(buffer),0);
       nByte=recv(new_fd,buffer,128,0);
       buffer[nByte]='\0';
       printf("send %s byte!\n",buffer);
       
       //关闭连接
       close(sockfd);
       return 0; 
 } 
View Code

 

编写基于TCP的server.c和client.c程序,要求使用recvmsg()和sendmsg()函数实现通信,通信内容可以自己定义。

 

posted on 2020-05-06 21:25  BUTTERSCOTCH  阅读(327)  评论(0编辑  收藏  举报