精华内容
下载资源
问答
  • 《计算机网络socket编程实验报告》由会员分享,可在线阅读,更多相关《计算机网络socket编程实验报告(4页珍藏版)》请在人人文库网上搜索。1、实课程名称实验项目名称实验时间 (日期及节次)专业年级姓名验计算机科学...

    《计算机网络socket编程实验报告》由会员分享,可在线阅读,更多相关《计算机网络socket编程实验报告(4页珍藏版)》请在人人文库网上搜索。

    1、实课程名称实验项目名称实验时间 (日期及节次)专业年级姓名验计算机科学与技术2011 级陈声晓报计算机网络Socket 通信4.16-4.30第 1 节-第 2 节学生所在学院学号指导教师告计算机学院20111913战扬实验室名称4-513计算机 3 机房分 1 室实验成绩预习情况操作技术实验报告附加:综合 实验 创新能力 综合成绩教师签字黑龙江大学教务处黑龙江大学计算机科学与技术专业、软件工程专业计算机网络课程实验报告学号 20111913 姓名 陈声晓 班级 1 班实验时间4.16-4.30 第 1 节-第 2 节实验名称 Socket 通信实验内容 在一台计算机上实现两个程序的通信一、 。

    2、实验目的掌握 Windows 通信程序的编写,通信原理,实际编写通信程序,本试验是后续 实验的基础。做到在一台计算机上实现两个程序的通信。二、 实验环境Windows xp/7三、 主要设计思想与算法1.服务器创建 socket,并规定通信的端口号(大于 1024),等待客户端的连接。 2.客户端创建 socket,通过端口号连接服务端。3. 客户端向服务端发送接收数据。4. 服务端接收发送数据。3. 通信结束,客户端和服务端关闭 socket。4. Socket 通信流程:四、实验结果(测试用例、实验结果)五、 实验总结计算机网络通信利用 java 语言编写时,用到的技术室 socket 技术。任何一个socket 程序都至少包含客户端程序和服务端程序。通过 IP 地址和端口号,实现了两台计算机之间的链接,然后才可以根据具体需要实现通信 。 运行时先运行服务器程序,不难理解,客户端没有开放,就无法连接。

    展开全文
  • Socket编程实验报告一、程序代码(1)服务器端#include #include #pragma comment(lib, "ws2_32.lib")void main(){ WORD wVersionRequested;WSADATA wsaData;int err;wVersionRequested = MAKEWORD( 1, 1 );err = ...

    Socket编程实验报告

    一、程序代码

    (1)服务器端

    #include

    #include

    #pragma comment(lib, "ws2_32.lib")

    void main()

    { WORD wVersionRequested;

    WSADATA wsaData;

    int err;

    wVersionRequested = MAKEWORD( 1, 1 );

    err = WSAStartup( wVersionRequested, &wsaData );

    if ( err != 0 ) { return; }

    if ( LOBYTE( wsaData.wVersion ) != 1 || HIBYTE( wsaData.wVersion ) != 1 )

    { WSACleanup( );return; }

    SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0);

    SOCKADDR_IN addrSrv;

    addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);

    addrSrv.sin_family=AF_INET;

    addrSrv.sin_port=htons(6000);

    bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));// 绑定端口

    listen(sockSrv,SOMAXCONN); //SOMAXCONN由系统确定请求数

    SOCKADDR_IN addrClient;// 连接上的客户端ip地址

    int len=sizeof(SOCKADDR);

    while(1)

    {SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);

    // 接受客户端连接,获取客户端的ip地址

    char sendBuf[50];

    sprintf(sendBuf,"Welcome %s to here!",inet_ntoa(addrClient.sin_addr));// 组合消息发送出去

    send(sockConn,sendBuf,strlen(sendBuf)+1,0);// 发送消息到客户端

    char recvBuf[50]; recv(sockConn,recvBuf,50,0);// 接受客户端消息

    printf("%s\n",recvBuf);

    closesocket(sockConn);

    WSACleanup();//断开连接

    }

    }

    (2)客户端代码

    #include

    #include

    #pragma comment(lib, "ws2_32.lib")

    void main()

    {

    WORD wVersionRequested;

    WSADATA wsaData;//WSAata用来存储系统传回的关于WinSocket的资料。

    int err;

    wVersionRequested = MAKEWORD( 1, 1 );

    err = WSAStartup( wVersionRequested, &wsaData );

    if ( err != 0 )

    {

    return;

    }

    if ( LOBYTE( wsaData.wVersion ) != 1 ||HIBYTE( wsaData.wVersion ) != 1 )

    {

    WSACleanup( );

    return;

    }

    SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0);

    // AF_INET ..tcp连接 ,初始化连接与端口号

    SOCKADDR_IN addrSrv;

    addrSrv.sin_addr.S_un.S_addr=inet_addr("");

    //本机地址,服务器在本机开启

    addrSrv.sin_family=AF_INET;

    addrSrv.sin_port=htons(6000);// 设置端口号

    connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));//连接服务器

    char recvBuf[50];

    recv(sockClient,recvBuf,50,0);//接受数据

    prin

    展开全文
  • 1.阻塞调用是指调用结果返回之前,当前线程会被挂起(线程进入非可执行状态,...在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让So.

    在这里插入图片描述

    1.阻塞调用是指调用结果返回之前,当前线程会被挂起(线程进入非可执行状态,在这个状态下,cpu不会给线程分配时间片,即线程暂停运行)。函数只有在得到结果之后才会返回。 非阻塞和阻塞的概念相对应,指在不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回。

    2.Socket是什么呢?
    Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。

    ocket一词的起源
    在组网领域的首次使用是在1970年2月12日发布的文献IETF RFC33中发现的,撰写者为Stephen Carr、Steve Crocker和Vint Cerf。根据美国计算机历史博物馆的记载,Croker写道:“命名空间的元素都可称为套接字接口。一个套接字接口构成一个连接的一端,而一个连接可完全由一对套接字接口规定。”计算机历史博物馆补充道:“这比BSD的套接字接口定义早了大约12年。”
    

    img

    服务器端先初始化Socket,然后与端口绑定(bind),对端口进行监听(listen),调用accept阻塞,等待客户端连接。在这时如果有个客户端初始化一个Socket,然后连接服务器(connect),如果连接成功,这时客户端与服务器端的连接就建立了。客户端发送数据请求,服务器端接收请求并处理请求,然后把回应数据发送给客户端,客户端读取数据,最后关闭连接,一次交互结束。


    socket()函数


    int socket(int domain, int type, int protocol);
    

    socket函数对应于普通文件的打开操作。普通文件的打开操作返回一个文件描述字,而socket()用于创建一个socket描述符(socket descriptor),它唯一标识一个socket。这个socket描述字跟文件描述字一样,后续的操作都有用到它,把它作为参数,通过它来进行一些读写操作。

    正如可以给fopen的传入不同参数值,以打开不同的文件。创建socket的时候,也可以指定不同的参数创建不同的socket描述符,socket函数的三个参数分别为:

    • domain:即协议域,又称为协议族(family)。常用的协议族有,AF_INET、AF_INET6、AF_LOCAL(或称AF_UNIX,Unix域socket)、AF_ROUTE等等。协议族决定了socket的地址类型,在通信中必须采用对应的地址,如AF_INET决定了要用ipv4地址(32位的)与端口号(16位的)的组合、AF_UNIX决定了要用一个绝对路径名作为地址。

    • type:指定socket类型。常用的socket类型有,SOCK_STREAM、SOCK_DGRAM、SOCK_RAW、SOCK_PACKET、SOCK_SEQPACKET等等(socket的类型有哪些?)。

    • protocol:故名思意,就是指定协议。常用的协议有,IPPROTO_TCP、IPPTOTO_UDP、IPPROTO_SCTP、IPPROTO_TIPC等,它们分别对应TCP传输协议、UDP传输协议、STCP传输协议、TIPC传输协议(这个协议我将会单独开篇讨论!)。

      注意:并不是上面的type和protocol可以随意组合的,如SOCK_STREAM不可以跟IPPROTO_UDP组合。当protocol为0时,会自动选择type类型对应的默认协议。

    当我们调用socket创建一个socket时,返回的socket描述字它存在于协议族(address family,AF_XXX)空间中,但没有一个具体的地址。如果想要给它赋值一个地址,就必须调用bind()函数,否则就当调用connect()、listen()时系统会自动随机分配一个端口。

    bind()函数

    正如上面所说bind()函数把一个地址族中的特定地址赋给socket。例如对应AF_INET、AF_INET6就是把一个ipv4或ipv6地址和端口号组合赋给socket。

    int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
    函数的三个参数分别为:

    sockfd:即socket描述字,它是通过socket()函数创建了,唯一标识一个socket。bind()函数就是将给这个描述字绑定一个名字。
    addr:一个const struct sockaddr *指针,指向要绑定给sockfd的协议地址。这个地址结构根据地址创建socket时的地址协议族的不同而不同,如ipv4对应的是:

    struct sockaddr_in {
        sa_family_t    sin_family; 
        in_port_t      sin_port;   
        struct in_addr sin_addr;   
    };
    
    
    struct in_addr {
        uint32_t       s_addr;     
    };
    

    ipv6对应的是:

    struct sockaddr_in6 { 
        sa_family_t     sin6_family;    
        in_port_t       sin6_port;      
        uint32_t        sin6_flowinfo;  
        struct in6_addr sin6_addr;      
        uint32_t        sin6_scope_id;  
    };
    
    struct in6_addr { 
        unsigned char   s6_addr[16];    
    };
    

    Unix域对应的是:

    #define UNIX_PATH_MAX    108
    
    struct sockaddr_un { 
        sa_family_t sun_family;                
        char        sun_path[UNIX_PATH_MAX];   
    };
    

    addrlen:对应的是地址的长度。
    通常服务器在启动的时候都会绑定一个众所周知的地址(如ip地址+端口号),用于提供服务,客户就可以通过它来接连服务器;而客户端就不用指定,有系统自动分配一个端口号和自身的ip地址组合。这就是为什么通常服务器端在listen之前会调用bind(),而客户端就不会调用,而是在connect()时由系统随机生成一个。

    listen()、connect()函数

    如果作为一个服务器,在调用socket()、bind()之后就会调用listen()来监听这个socket,如果客户端这时调用connect()发出连接请求,服务器端就会接收到这个请求。

    int listen(int sockfd, int backlog);
    int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
    

    listen函数的第一个参数即为要监听的socket描述字,第二个参数为相应socket可以排队的最大连接个数。socket()函数创建的socket默认是一个主动类型的,listen函数将socket变为被动类型的,等待客户的连接请求。

    connect函数的第一个参数即为客户端的socket描述字,第二参数为服务器的socket地址,第三个参数为socket地址的长度。客户端通过调用connect函数来建立与TCP服务器的连接。

    accept()函数

    TCP服务器端依次调用socket()、bind()、listen()之后,就会监听指定的socket地址了。TCP客户端依次调用socket()、connect()之后就想TCP服务器发送了一个连接请求。TCP服务器监听到这个请求之后,就会调用accept()函数取接收请求,这样连接就建立好了。之后就可以开始网络I/O操作了,即类同于普通文件的读写I/O操作。

    int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
    

    accept函数的第一个参数为服务器的socket描述字,第二个参数为指向struct sockaddr *的指针,用于返回客户端的协议地址,第三个参数为协议地址的长度。如果accpet成功,那么其返回值是由内核自动生成的一个全新的描述字,代表与返回客户的TCP连接。

    注意:accept的第一个参数为服务器的socket描述字,是服务器开始调用socket()函数生成的,称为监听socket描述字;而accept函数返回的是已连接的socket描述字。一个服务器通常通常仅仅只创建一个监听socket描述字,它在该服务器的生命周期内一直存在。内核为每个由服务器进程接受的客户连接创建了一个已连接socket描述字,当服务器完成了对某个客户的服务,相应的已连接socket描述字就被关闭。

    read()、write()等函数

    万事具备只欠东风,至此服务器与客户已经建立好连接了。可以调用网络I/O进行读写操作了,即实现了网咯中不同进程之间的通信!网络I/O操作有下面几组:

    read()/write()
    recv()/send()
    readv()/writev()
    recvmsg()/sendmsg()
    recvfrom()/sendto()
    我推荐使用recvmsg()/sendmsg()函数,这两个函数是最通用的I/O函数,实际上可以把上面的其它函数都替换成这两个函数。它们的声明如下:

       #include 
    
       ssize_t read(int fd, void *buf, size_t count);
       ssize_t write(int fd, const void *buf, size_t count);
    
       #include 
       #include 
    
       ssize_t send(int sockfd, const void *buf, size_t len, int flags);
       ssize_t recv(int sockfd, void *buf, size_t len, int flags);
    
       ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,
                      const struct sockaddr *dest_addr, socklen_t addrlen);
       ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,
                        struct sockaddr *src_addr, socklen_t *addrlen);
    
       ssize_t sendmsg(int sockfd, const struct msghdr *msg, int flags);
       ssize_t recvmsg(int sockfd, struct msghdr *msg, int flags);
    

    read函数是负责从fd中读取内容.当读成功时,read返回实际所读的字节数,如果返回的值是0表示已经读到文件的结束了,小于0表示出现了错误。如果错误为EINTR说明读是由中断引起的,如果是ECONNREST表示网络连接出了问题。

    write函数将buf中的nbytes字节内容写入文件描述符fd.成功时返回写的字节 数。失败时返回-1,并设置errno变量。在网络程序中,当我们向套接字文件描述符写时有俩种可能。1)write的返回值大于0,表示写了部分或者是 全部的数据。2)返回的值小于0,此时出现了错误。我们要根据错误类型来处理。如果错误为EINTR表示在写的时候出现了中断错误。如果为EPIPE表示 网络连接出现了问题(对方已经关闭了连接)。

    close()函数

    在服务器与客户端建立连接之后,会进行一些读写操作,完成了读写操作就要关闭相应的socket描述字,好比操作完打开的文件要调用fclose关闭打开的文件。

    #include 
    int close(int fd);
    

    close一个TCP socket的缺省行为时把该socket标记为以关闭,然后立即返回到调用进程。该描述字不能再由调用进程使用,也就是说不能再作为read或write的第一个参数。

    注意:close操作只是使相应socket描述字的引用计数-1,只有当引用计数为0的时候,才会触发TCP客户端向服务器发送终止连接请求。

    3.见上文

    展开全文
  • 网络socket编程(c语言)

    千次阅读 2021-11-22 12:02:09
    Socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API),通过Socket,我们才能使用TCP/IP协议,主要利用三元组【ip地址,协议,端口】。 socket起源于Unix,而Unix/Linux基本哲学之一就是...

    一.socket通信简介

    Socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API),通过Socket,我们才能使用TCP/IP协议,主要利用三元组【ip地址,协议,端口】。
    socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,都可以用“打开open –> 读写write/read –> 关闭close”模式来操作。
    Socket()函数返回一个整型的Socket描述符,随后的连接建立、数据传输等操作都是通过该Socket实现的。Socket是应用层与TCP/IP协议族通信的中间软件抽象层。
    在这里插入图片描述
    二.网络socket客户端和服务器端连接过程如下:
    在这里插入图片描述

    1.1 socket()
    int socket(int domain,int type, int protocol);
    返回值: 成功:返回指向新创建的socket的文件描述符,失败:返回-1。

    domain:即协议域,又称为协议族(family)。常用的协议族有,AF_INET、AF_INET6、AF_LOCAL(或称AF_UNIX,Unix域socket)、AF_ROUTE等等。协议族决定了socket的地址类型,在通信中必须采用对应的地址,如AF_INET决定了要用ipv4地址(32位的)与端口号(16位的)的组合、AF_UNIX决定了要用一个绝对路径名作为地址。
    type:创建的套接字的类型,常用SOCK_STREAM(流式套接字),SOCK_DGRAM(数据报套接字)

    protocol: 传0 表示使用默认协议。

    1.2 bind()
    int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
    返回值:函数执行成功返回0,否则返回-1, 并设置错误代码。

    sockfd:需要绑定的套接字文件描述符。
    addr:存入网络类型,网络地址和端口号的结构体。
    addrlen:addr结构体的长度。

    ipv4使用的结构体是struct sockaddr_in类型,所以绑定时需要强制类型转换成struct sockaddr类型
    struct sockaddr_in
    {
    sa_family_t sin_family; /* 2 bytes address family, AF_xxx such as AF_INET /
    in_port_t sin_port; /
    2 bytes port*/
    struct in_addr sin_addr; /* 4 bytes IPv4 address*/
    unsigned char sin_zero[8]; /* 8 bytes unused padding data, always set be zero */
    };

    struct sockaddr
    {
    sa_family_t sa_family; /* 2 bytes address family, AF_xxx /
    char sa_data[14]; /
    14 bytes of protocol address */
    }

    在使用bind时常用的两个函数:htonshtonl,在将一个地址绑定到socket的时候,先将主机字节序转换成为网络字节序
    serv_addr.sin_port = htons(LISTEN_PORT);
    serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);

    IP地址“127.0.0.1”这是点分十进制形式的字符串形式,而在结构体struct sockaddr_in 中IP地址是以32位(即4字节整形类型)数据保存的,这时我们可以调用 inet_aton() 函数将点分十进制字符串转换成 32位整形类型

    1.3 listen()
    int listen(int sockfd,int backlog);
    返回值:成功返回0,失败返回-1。
    sockfd: socket文件描述符
    backlog: 排队建立3次握手队列和刚刚建立3次握手队列的链接数和

    1.4 accept()
    int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);

    属性相同的连接套接字,并为这个套接字分配一个文件描述符,然后以这个描述符返回
    返回值:若成功则返回一个非负整数标识这个连接套接字,发生错误时返回-1。
    sockfd:一个正在用于监听功能下的套接字的文件描述符。
    addr:用于储存接受到的客户端的网络信息的结构体(参考bind下的使用)
    addrlen:addr结构体长度

    1.5 connect()
    int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);

    sockfd: 客户端的socket()创建的描述字
    addr: 要连接的服务器的socket地址信息,这里面包含有服务器的IP地址和端口等信息
    addrlen: socket地址的长度

    客户端server.c程序编写

    /*********************************************************************************
     *      Copyright:  (C) 2021 jiaoer237
     *                  All rights reserved.
     *
     *       Filename:  socket_server.c
     *    Description:  This file 
     *                 
     *        Version:  1.0.0(11/21/2021)
     *         Author:  yanp <2405204881@qq.com>
     *      ChangeLog:  1, Release initial version on "11/21/2021 01:59:13 PM"
     *                 
     ********************************************************************************/
    #include <stdio.h>
    #include <string.h>
    #include <errno.h>
    #include <unistd.h>
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <arpa/inet.h>
    
    #define PORT 8899
    #define BACKLOG 13
    
    int socket_server_init(char *listen_ip,int listen_port);
    
    int main()
    {
        int listen_fd,clien_fd=-1;
        struct sockaddr_in cli_addr;
        socklen_t cliaddr_len;
        char buf[1024];
        int rv=-1;
    
        listen_fd=socket_server_init(NULL,PORT);/*初始化socket函数*/
    
        while(1)
        {
            printf("\nstart waiting and accept new client connect...\n");
            clien_fd=accept(listen_fd,(struct sockaddr*)&cli_addr,&cliaddr_len);/*accept调用*/
            if(clien_fd<0)
            {
                printf("accept new client failure:%s\n",strerror(errno));
                return -1;
            }
            printf("accept new client[%s:%d] with fd [%d]\n",inet_ntoa(cli_addr.sin_addr),ntohs(cli_addr.sin_port),clien_fd);
    
            memset(buf,0,sizeof(buf));
            rv=read(clien_fd,buf,sizeof(buf));
            if(rv<0)
            {
                printf("read data from socket[%d] failure:%s\n",clien_fd,strerror(errno));
                close(clien_fd);
                continue;
            }
            else if(0==rv)
            {
                printf("read data from socket[%d] failure:%s\n",clien_fd,strerror(errno));
                close(clien_fd);
                continue;
            }
            printf("read %d data from server client [%d] and echo it back:'%s'\n",rv,clien_fd,buf);
    
            if(write(clien_fd,buf,rv)<0)
            {
                printf("write %d bytes data back to client[%d] failure:%s\n",rv,clien_fd,strerror(errno));
                close(clien_fd);
            }
        }
    
        return 0;
    }
    
    int socket_server_init(char *listen_ip,int listen_port)
    {
        int listenfd;
        struct sockaddr_in servaddr;
        
    
        if((listenfd=socket(AF_INET,SOCK_STREAM,0))<0)/*创建socket描述符*/
        {
            printf("socket_server to create a TCP socket fd failure:[%s]\n",strerror(errno));
            return -1;
        }
        printf("create a tcp socket fd[%d] success\n",listenfd);
    
        int on=1;  
        if((setsockopt(listenfd,SOL_SOCKET,SO_REUSEADDR,&on,sizeof(on)))<0) /*让端口号能够立即重复使用*/
        {
            printf("setsockopt failure:%s",strerror(errno));
            return -2;
        }
    
        memset(&servaddr,0,sizeof(servaddr));
        servaddr.sin_family=AF_INET;
        servaddr.sin_port=htons(PORT);
        if(!listen_ip)/*加入传入IP地址则监听指定ip,否则监听所有ip*/
        {
            servaddr.sin_addr.s_addr=htonl(INADDR_ANY);
        }
        else
        {
            servaddr.sin_addr.s_addr=htonl(listen_port);
        }
    
        if(bind(listenfd,(struct sockaddr *)&servaddr,sizeof(servaddr))<0)/*绑定端口号和ip*/
        {
            printf("socket[%d] bind on port[%d] for ip address failure:%s\n",listenfd,listen_port,strerror(errno));
            return -2;
        }
        printf("socket[%d] bind on port[%d] for ip address success\n",listenfd,listen_port);
    
        listen(listenfd,BACKLOG);
        return listenfd;
    }
    

    服务器端client.c程序编写

    /*********************************************************************************
     *      Copyright:  (C) 2021 jiaoer237
     *                  All rights reserved.
     *
     *       Filename:  socket_client.c
     *    Description:  This file 
     *                 
     *        Version:  1.0.0(11/21/2021)
     *         Author:  yanp <2405204881@qq.com>
     *      ChangeLog:  1, Release initial version on "11/21/2021 08:49:25 PM"
     *                 
     ********************************************************************************/
    #include <stdio.h>
    #include <errno.h>
    #include <string.h>
    #include <unistd.h>
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <arpa/inet.h>
    
    #define SERVER_PORT 8899
    #define MSG_STR "Hello yanp, Unix Network Program World!"
    #define SERVER_IP "192.168.1.120"
    
    int main(int argc,char **argv)
    {
        int conn_fd = -1;
        int rv = -1;
        char buf[1024];
        struct sockaddr_in serv_addr;
    
        conn_fd=socket(AF_INET,SOCK_STREAM,0);/*socket创建客户端的描述符*/
        if(conn_fd<0)
        {
            printf("create client socket failure:%s\n",strerror(errno));
            return -1;
        }
    
        memset(&serv_addr, 0, sizeof(serv_addr));
        serv_addr.sin_family = AF_INET;
        serv_addr.sin_port = htons(SERVER_PORT);
        inet_aton(SERVER_IP,&serv_addr.sin_addr);/*将点分十进制转换成32位整型类型*/
    
        if(connect(conn_fd,(struct sockaddr *)&serv_addr,sizeof(serv_addr))<0)/*连接服务器*/
        {
            printf("client[%d] connect to server[%s:%d] failure:%s\n",conn_fd,SERVER_IP,SERVER_PORT,strerror(errno));
            return -1;
        }
    
        if(write(conn_fd,MSG_STR,strlen(MSG_STR))<0)
        {
            printf("write data to server[%s,%d] failure:%s\n",SERVER_IP,SERVER_PORT,strerror(errno));
            return -2;
        }
        
        memset(buf,0,sizeof(buf));
        rv=read(conn_fd,buf,sizeof(buf));
        if(rv<0)
        {
            printf("read data from server failure:%s\n",strerror(errno));
            return -3;
        }
        else if(rv==0)
        {
            printf("client connetc to server get disconnect\n");
            return -4;
        }
        printf("read %d bytes from server:'%s'\n",rv,buf);
    
        return 0;
    }
    

    在这里插入图片描述
    在这里插入图片描述
    客户端连接服务器之后进行读写操作

    展开全文
  • 使用java如何实现基于TCP协议网络socket编程发布时间:2020-10-31 01:23:16来源:亿速云阅读:118作者:Leah使用java如何实现基于TCP协议网络socket编程?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望...
  • 那么我们这次来学习网络socket编程, 话不多说, 直接开整 文章目录1. UDP通信流程2. socket接口创建套接字为套接字绑定地址信息发送数据接收数据关闭套接字地址转换接口3. 代码实现UDP通信封装socket接口模拟实现...
  • 实 验 报 告课程名称 计算机网络实验项目名称 Socket 通信实验时间 4.16-4.30...
  • Python 基础 之 网络 socket 使用 tcp (SOCK_STREAM)实现简单 文件下载 的 客户端、服务端 目录 Python 基础 之 网络 socket 使用 tcp (SOCK_STREAM)实现简单 文件下载 的 客户端、服务端 一、简单介绍 二...
  • Python 基础 之 网络 socket 使用 tcp (SOCK_STREAM)实现简单的客户端、服务端(消息发送和接收) 一、简单介绍 Python是一种跨平台的计算机程序设计语言。是一种面向对象的动态类型语言,最初被设计用于...
  • Linux--网络SOCKET编程

    2021-07-20 21:30:47
    Linux--网络SOCKET编程前言一、socket编程1.1 socket通信简介1.2 socket操作API函数二、源码与效果展示2.1 服务器端源码2.2 客户端源码2.3 效果图三、总结 注:本文系湛江市岭南师范学院物联网俱乐部原创部分训练...
  • Socket网络聊天 二 、 环境 Windows10    VC6.0++ 三 、 代码实现 多线程使用示例 socket使用有固定的格式,参数配置,故不说明。 多线程是实现消息的全双工通信,即客户端或服务端都可以连续发送多条消息...
  • Socket网络编程及其实现(图文)

    千次阅读 2021-07-05 09:16:34
    论文导读:网络应用程序是通过网络使用通信协议实现进程间的通信,TCP/IP就是网络上常用的协议之一,在进行网络应用程序设计时,TCP/IP协议的核心内容被封装在操作系统中。因此,可以说设计网络应用程序就是利用网络...
  • Python 基础 之 网络 socket 使用 udp (SOCK_DGRAM)实现简单的消息发送和接收 目录 Python 基础 之 网络 socket 使用 udp (SOCK_DGRAM)实现简单的消息发送和接收 一、简单介绍 二、实现原理 三、注意事项...
  • Socket判断网络断开

    2021-03-16 21:14:01
    能大家知道在使用Java Socket编程的时候经常要检测网络是不是完好连接的。比如Socket服务器检测和客户端的连接是否已经断开。首先想到socket类的方法isClosed()、isConnected()、isInputStreamShutdown()、...
  • 你也可以这样理解,Socket API 是在 Socket 文件基础上进行的一层封装,而 Socket 文件是操作系统提供支持网络通信的一种文件格式。 在服务端有两种 Socket 文件,每个客户端接入之后会形成一个客户端的 Socket 文件...
  • Python 基础 之 网络 socket 使用 udp (SOCK_DGRAM)结合 线程 Thread 实现简单的实时聊天功能 目录 Python 基础 之 网络 socket 使用 udp (SOCK_DGRAM)结合 线程 Thread 实现简单的实时聊天功能 一、简单...
  • 写代码的时候,先应该调用函数,其次再考虑用函数时该如何传参 TCP编程流程 监听:listen 发送数据:send 发起连接connect 接收数据:recv 监听: int listen(int sockfd, int ...三次握手时网络协议栈完
  • 源代码: server.c 编译命令:gcc server.c -o server -lpthread #include <...sys/socket.h> #include <sys/types.h> //pthread_t , pthread_attr_t and so on. #include <stdio.h> #i...
  • 网络应用的Socket API(TCP)调用基本流程 1.应用编程接口(API) 网络程序设计接口 应用编程接口 API 应用编程接口API:就是应用进程的控制权和操作系统的控制权进行转换的一个系统调用接口。 几种典型的应用编程...
  • 在 android socket 编程中我们需要时刻对其网络状态进行判断,android(java)对网络状态判断的方法(相关方法如下:方法一:try {socket.sendUrgentData(0xFF);} catch (IOException e) {//网络断开...
  • Socket编程 (一) 基本函数介绍 1.socket()函数:创建一个socket描述字 int socket(int domain, int type, int protocol) 用于打开操作 domain: 协议域(定义了socket的地址类型)---------常用的有: AF_INET、AF_INET...
  • 实验一 Socket编程实验1.1环境开发环境:Windows 10 64 位,Intel Core i5-7300HQ CPU, 8GB 内存1.1. 1开发平台Microsoft Visual Studio Community 2017 结合 QT5.9.21.1.2运行平台硬件配置:Windows 10 64 位,Intel ...
  • 用于个人笔记记录
  • C++利用socket技术建立网络连接 1. socket技术简介     计算机通信领域,socket被翻译为“套接字”,它是计算机之间进行通信的一种约定,或一种方式。通过socket这种约定,计算机之间可以建立连接,并传输数据。...
  • Java Socket编程基础篇

    2021-02-27 19:09:00
    Java最初是作为网络编程语言出现的,其对网络提供了高度的支持,使得客户端和服务器的沟通变成了现实,而在网络编程中,使用最多的就是Socket。像大家熟悉的QQ、MSN都使用了Socket相关的技术。下面就让我们一起揭开...
  • Socket的错误码和描述(中英文翻译)//下面是Socket Error的错误码和描述:Socket error 0 - Directly send errorSocket error 10004 - Interrupted function //call 操作被终止Socket error 10013 - Permission ...
  • 计算机网络实验socket编程实验三 socket套接字编程实验一、Sockets编程基础知识网络编程就是通过计算机网络与其他程序进行通信的程序,Socket编程是网络编程的主流工具。Socket API是实现进程间通信的一种编程设施,...
  • 网络编程socket

    2021-03-13 11:55:41
    OSI 7层模型 7 应用层 各种应用程序 6 表示层 数据格式化、数据加密解密、 数据的压缩解压缩 5 会话层 建立、管理、终止应用之间的会话连接 ... 3 网络层 逻辑寻址;路由选择 2 数据链路层 将分组
  • 了解Socket首先必须要对基础网络传输协议有一定的了解,比如OSI七层和TCP/IP五层标准网络架构有一定的了解。 TCP/IP五层:应用层,传输层,网络层,数据链路层,物理层; OSI七层:应用层,表示层,会话层,传输层,...
  • linux 查看socket的使用情况

    千次阅读 2021-05-10 06:20:59
    通过查看socket可以得知系统的网络连接状况,我知道的有下面的几方法可以获取系统的socket的使用情况。1.netstatnestat的使用方法没什么好说的,运维的家常必备,如果连这个都不会那是相当不靠谱[root@localhost]#...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 520,886
精华内容 208,354
关键字:

网络socket