⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 scoket.txt

📁 自己编写的socket通信
💻 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 + -