精华内容
下载资源
问答
  • Socket编程步骤(笔试题)

    千次阅读 2018-06-22 10:33:12
    问:socket编程执行send之后系统进行哪种操作?答:如果采用系统是采用阻塞模式,则系统执行send之后会等待对方返回结果才执行下一步。如果是非阻塞模式则将当前线程挂起,执行系统下一个操作。问:什么是粘包?答:...

    问:socket编程执行send之后系统进行哪种操作?

    答:如果采用系统是采用阻塞模式,则系统执行send之后会等待对方返回结果才执行下一步。如果是非阻塞模式则将当前线程挂起,执行系统下一个操作。

    问:什么是粘包?

    答:出现粘包现象的原因是多方面的,它既可能由发送方造成,也可能由接收方造成。发送方引起的粘包是由TCP协议本身造成的,TCP为提高传输效率,发送方往往要收集到足够多的数据后才发送一包数据。若连续几次发送的数据都很少,通常TCP会根据优化算法把这些数据合成一包后一次发送出去,这样接收方就收到了粘包数据。接收方引起的粘包是由于接收方用户进程不及时接收数据,从而导致粘包现象。这是因为接收方先把收到的数据放在系统接收缓冲区,用户进程从该缓冲区取数据,若下一包数据到达时前一包数据尚未被用户进程取走,则下一包数据放到系统接收缓冲区时就接到前一包数据之后,而用户进程根据预先设定的缓冲区大小从系统接收缓冲区取数据,这样就一次取到了多包数据.


    sockets(套接字)编程有三种,流式套接字(SOCK_STREAM),数据报套接字(SOCK_DGRAM),原始套接字(SOCK_RAW);基于TCP的socket编程是采用的流式套接字,UDP为数据报套接字。


    服务器端编程的步骤:

    1:加载套接字库,创建套接字(WSAStartup()/socket());

    2:绑定套接字到一个IP地址和一个端口上(bind());

    3:将套接字设置为监听模式等待连接请求(listen());

    4:请求到来后,接受连接请求,返回一个新的对应于此次连接的套接字(accept());

    5:用返回的套接字和客户端进行通信(send()/recv());

    6:返回,等待另一连接请求;

    7:关闭套接字,关闭加载的套接字库(closesocket()/WSACleanup())。


    客户端编程的步骤:

    1:加载套接字库,创建套接字(WSAStartup()/socket());

    2:向服务器发出连接请求(connect());

    3:和服务器端进行通信(send()/recv());

    4:关闭套接字,关闭加载的套接字库(closesocket()/WSACleanup())。


    参考:

    C++ Socket编程步骤  https://www.cnblogs.com/Sniper-quay/archive/2011/06/22/2086636.html   

    socket阻塞与非阻塞,同步与异步、I/O模型    https://blog.csdn.net/hguisu/article/details/7453390


    展开全文
  • C++ Socket编程步骤

    万次阅读 多人点赞 2019-03-06 17:26:33
    sockets(套接字)编程有三种,流式套接字(SOCK_STREAM),数据报套接字(SOCK_DGRAM),原始...基于TCP的socket编程是采用的流式套接字。 服务器端编程的步骤: 1:加载套接字库,创建套接字(WSAStartup()/socke...

     

    转自https://www.cnblogs.com/chencaiming/p/7249904.html

     sockets(套接字)编程有三种,流式套接字(SOCK_STREAM),数据报套接字(SOCK_DGRAM),原始套接字(SOCK_RAW);基于TCP的socket编程是采用的流式套接字。

    服务器端编程的步骤:

    1:加载套接字库,创建套接字(WSAStartup()/socket());

    2:绑定套接字到一个IP地址和一个端口上(bind());

    3:将套接字设置为监听模式等待连接请求(listen());

    4:请求到来后,接受连接请求,返回一个新的对应于此次连接的套接字(accept());

    5:用返回的套接字和客户端进行通信(send()/recv());

    6:返回,等待另一连接请求;

    7:关闭套接字,关闭加载的套接字库(closesocket()/WSACleanup())。

    客户端编程的步骤:

    1:加载套接字库,创建套接字(WSAStartup()/socket());

    2:向服务器发出连接请求(connect());

    3:和服务器端进行通信(send()/recv());

    4:关闭套接字,关闭加载的套接字库(closesocket()/WSACleanup())。

    第一式: 加载/释放Winsock库:

    1.加载方法:

    WSADATA wsa;
    /*初始化socket资源*/
    if (WSAStartup(MAKEWORD(1,1),&wsa) != 0)
    {
        return;   //代表失败
    }

    2.释放方法:

    WSACleanup();

    第二式: 构造SOCKET:

    1.服务端:构造监听SOCKET,流式SOCKET.
       SOCKET Listen_Sock = socket(AF_INET, SOCK_STREAM, 0)

    2.客户端:构造通讯SOCKET,流式SOCKET.
    SOCKET Client_Sock = socket(AF_INET, SOCK_STREAM, 0)

    第三式:配置监听地址和端口:

    1.服务端: SOCKADDR_IN serverAddr
    ZeroMemory((char *)&serverAddr,sizeof(serverAddr));
       serverAddr.sin_family = AF_INET;
       serverAddr.sin_port = htons(1234);           /*本地监听端口:1234*/
       serverAddr.sin_addr.s_addr = htonl(INADDR_ANY); /*有IP*/

    第四式:   绑定SOCKET:

    1.服务端:绑定监听SOCKET.
      bind(Listen_Sock,(struct sockaddr *)&serverAddr,sizeof(serverAddr))

    第五式: 服务端/客户端连接:

    1.服务端:等待客户端接入.
       SOCKET Command_Sock = accept(Listen_Sock, ...)

    2.客户端:请求与服务端连接.
    int ret = connect(Client_Sock, ...)

    第六式: 收/发数据:

    1.服务端:等待客户端接入.char buf[1024].
        接收数据:recv(Command_Sock,buf, ...)

        发送数据:send(Command_Sock,buf, ...)

    2.客户端:请求与服务端连接.char buf[1024].
        发送数据:send(Client_Sock,buf, ...)

        接收数据:recv(Client_Sock,buf, ...)

    第七式: 关闭SOCKET:

    1.服务端:关闭SOCKET.
       closesocket(Listen_Sock)
    closesocket(Command_Sock)

    2.客户端:关闭SOCKET.
    closesocket(Client_Sock)

    #include <stdio.h>

    #include <Winsock2.h>

    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,5);

     

     SOCKADDR_IN addrClient;

     int len=sizeof(SOCKADDR);

     while(1)

     {

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

      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);

     }

     

    }

    复制代码

    复制代码

    #include <stdio.h>
    #include <Winsock2.h>
    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 sockClient=socket(AF_INET,SOCK_STREAM,0);
     
     SOCKADDR_IN addrSrv;
     addrSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
     addrSrv.sin_family=AF_INET;
     addrSrv.sin_port=htons(6000);
     connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
     send(sockClient,"hello",strlen("hello")+1,0);
     char recvBuf[50];
     recv(sockClient,recvBuf,50,0);
     printf("%s\n",recvBuf);
     
     closesocket(sockClient);
     WSACleanup();
    }

     

    复制代码

    展开全文
  • c++ socket 编程

    2019-01-10 10:32:06
    c++与socket之间通过socket编程,消息是以结构体的方式发送。
  • Socket编程步骤

    2017-02-23 17:09:54
    (1)建立一个服务器Socket绑定指定端口并开始监听 (2)使用accept()方法阻塞等待监听,获得新的连接 (3)建立输入和输出流 (4)在已有的协议上产生会话 (5)使用close()关闭流和Socket 2、客服端 (1)...

    1、服务器端

    (1)建立一个服务器Socket绑定指定端口并开始监听

    (2)使用accept()方法阻塞等待监听,获得新的连接

    (3)建立输入和输出流

    (4)在已有的协议上产生会话

    (5)使用close()关闭流和Socket

    2、客服端

    (1)建立客服端Socket连接,指定服务器的位置以及端口

    (2)得到Socket的读写流

    (3)利用流按照一定的协议对Socket进行读/写操作

    (4)使用close()关闭流和Socket



    展开全文
  • TCP/UDP Socket编程步骤

    千次阅读 2014-12-24 13:42:47
    TCP/UDP Socket编程步骤 2010-11-01 15:04:33 分类: C/C++ sockets(套接字)编程有三种,流式套接字(SOCK_STREAM),数据报套接字(SOCK_DGRAM),原始套接字(SOCK_RAW); WINDOWS环境下TCP/UDP...
      TCP/UDP Socket编程步骤  2010-11-01 15:04:33

    分类: C/C++

    sockets(套接字)编程有三种,流式套接字(SOCK_STREAM),数据报套接字(SOCK_DGRAM),原始套接字(SOCK_RAW);

    WINDOWS环境下TCP/UDP编程步骤:

    1. 基于TCPsocket编程是采用的流式套接字。

    在这个程序中,将两个工程添加到一个工作区。要链接一个ws2_32.lib的库文件。

    服务器端编程的步骤:

    1:加载套接字库,创建套接字(WSAStartup()/socket())

    2:绑定套接字到一个IP地址和一个端口上(bind())

    3:将套接字设置为监听模式等待连接请求(listen())

    4:请求到来后,接受连接请求,返回一个新的对应于此次连接的套接字(accept())

    5:用返回的套接字和客户端进行通信(send()/recv())

    6:返回,等待另一连接请求;

    7:关闭套接字,关闭加载的套接字库(closesocket()/WSACleanup())

    服务器端代码如下:

    #include <stdio.h>

    #include <Winsock2.h>

    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,5);

     SOCKADDR_IN addrClient;

     int len=sizeof(SOCKADDR);

     while(1)

     {

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

      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);

     }

    }

    客户端编程的步骤:

    1:加载套接字库,创建套接字(WSAStartup()/socket())

    2:向服务器发出连接请求(connect())

    3:和服务器端进行通信(send()/recv())

    4:关闭套接字,关闭加载的套接字库(closesocket()/WSACleanup())

    客户端的代码如下:

    #include <stdio.h>

    #include <Winsock2.h>

    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 sockClient=socket(AF_INET,SOCK_STREAM,0);

     

     SOCKADDR_IN addrSrv;

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

     addrSrv.sin_family=AF_INET;

     addrSrv.sin_port=htons(6000);

     connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));

     char recvBuf[50];

     recv(sockClient,recvBuf,50,0);

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

     send(sockClient,"hello",strlen("hello")+1,0);

     

     closesocket(sockClient);

     WSACleanup();

    }

    2.基于UDPsocket编程是采用的数据报套接字。

    在这个程序中,将两个工程添加到一个工作区。同时还要链接一个ws2_32.lib的库文件。

    服务器端编程的步骤:

    1:加载套接字库,创建套接字(WSAStartup()/socket())

    2:绑定套接字到一个IP地址和一个端口上(bind())

    3:等待和接收数据(sendto()/recvfrom())

    4:关闭套接字,关闭加载的套接字库(closesocket()/WSACleanup())

    服务器端代码如下:

    #include <winsock2.h>

    #include <stdio.h>

    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_DGRAM,0);

     SOCKADDR_IN addrSrv;

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

     addrSrv.sin_family=AF_INET;

     addrSrv.sin_port=htons(7003);

     bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));

     char recvBuf[50];

     SOCKADDR addrClient;

     int len=sizeof(SOCKADDR);

     recvfrom(sockSrv,recvBuf,50,0,(SOCKADDR*)&addrClient,&len);

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

     closesocket(sockSrv);

     WSACleanup();

    }

    对于基于UDPsocket客户端来说,要进行如下步骤:

    1:创建一个套接字(socket)

    2:向服务器发送数据(sendto);

    3:关闭套接字;

    代码如下:

    #include <winsock2.h>

    #include <stdio.h>

    void main()

    {

     WORD wVersionRequested;

     WSADATA wsaData;

     int err;

     

     wVersionRequested = MAKEWORD( 2, 2 );

     

     err = WSAStartup( wVersionRequested, &wsaData );

     if ( err != 0 ) {

      return;

     }

     if ( LOBYTE( wsaData.wVersion ) != 2 ||

            HIBYTE( wsaData.wVersion ) != 2 ) {

      WSACleanup( );

      return;

     }

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

     SOCKADDR_IN addrClient;

     addrClient.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");

     addrClient.sin_family=AF_INET;

     addrClient.sin_port=htons(8889);

     SOCKADDR_IN addrSrv;

     sendto(sockClient,"hi",3,0,(SOCKADDR*)&addrClient,sizeof(SOCKADDR));

    }

    LINUX环境下TCP/UDP编程步骤:

    TCP编程步骤:

    服务端:

       1.socket(int domain,int type,int protocol):建立套接字;

       2 .bind(int sockid,struct sockaddr *addrp,socklen_t addrlen):把本机地址和端口跟上一步建立的socket绑定在一起;

       3.listen(int sockid,int qsize):监听某套接字;

       4.fd=accept(int sockid,struct sockaddr *callerid,socklen_t *addrlenp):等待某套接字接收信息;

       5.recv(int fd,void *buf,size_t nbytes,int flags):从套接字接收数据;

       6.close(fd) close(sockid)

      .客户端:

       1. socket():建立套接字;

       2.connect(int sockid,struct sockaddr *serv_addrp,socklen_t addrlen):连接到服务器;

       3. send(int sockfd,const void *buf,size_t nbytes,int flags):发送数据到服务器.

       4. close(sockid);

    UDP编程步骤:

     一,服务端:

       1socket():同上;

       2bind():同上;

       3recvfrom(int sockfd,void*buff,size_t nbytes,int flags,struct sockaddr*from,socklen_t*addrlen):在套接字口接收数据,并且记录下接收到的数据来源;一定要注意这里的参数addrlen,它不仅是函数的输出,也是函数的输入!所以要在调用该函数之前对addrlen赋值sizeof(struct sockaddr)。否则返回的地址from将会出错!

       4close(sockfd);

      客户端:

        1socket();同上;

        2sendto(int sockfd,const void*buff,size_t nbytes,int flags,const struct sockaddr*to,socklen_t addrlen):往指定的地址发送数据;

        3close(sockfd);

    展开全文
  • socket编程步骤

    千次阅读 2013-06-19 21:40:30
    sockets(套接字)编程有三种,流式套接字(SOCK_STREAM),数据报套接字(SOCK_DGRAM),原始套接字(SOCK_...基于TCP的socket编程是采用的流式套接字。 服务器端编程的步骤: 1:加载套接字库,创建套接字(W
  • vc中socket编程步骤

    2011-10-09 11:34:26
    vc中socket编程步骤,有了这个,就不怕经常忘记怎么写了.
  • 该实例讲述了socket的创建,绑定,连接,发送,关闭,整个socket通信的基本步骤
  • Sockt服务器和客户端的开发步骤 1.创建套接字 2.为套接字添加信息(IP地址和端口号) 3.监听网络连接
  • 一、请求版本号 1、首先定义一个结构体对象 ...连接服务器使用函数connect,如果连接失败返回SOCKET_ERROR, 如果连接成功就会返回0。 五、接收或者发送消息 利用函数send和recv发送或者接收消息与服务端通信。
  • socket编程流程总结

    千次阅读 2020-08-29 18:34:18
    Windows socket网络编程 流程示例 一.TCP流式套接字的编程步骤服务器端程序流程服务器端代码客户端程序流程客户端代码二.UDP型套接字的编程步骤服务器(接收)端程序服务器端代码客户端端代码三.聊天程序中的注意...
  • C# 最基本的Socket编程C# Socke详解
  • socket C语言编写 客户端和服务器端程序,用于服务器和客户端之间的通信
  • 基于Java的Socket编程的简单学习

    千次阅读 2019-09-17 15:33:09
    什么是Socket 网络由下往上分为 物理层 、数据链路层 、 网络层 、 传输层 、 会话层 、 表现层 和 应用层。IP协议对应于网络层,TCP协议对应于传输层,而HTTP协议对应于应用层。TCP/IP协议是传输层协议,主要解决...
  • 可以使用TCP做很多事情,比如说我们做交互、登录还可以做在线聊天室,还可以手写服务器,这些都会不断涉及,目前先掌握Socket编程的套路,先把套路学会了。 package com.sxt.tcp; import java.io....
  • socket 编程步骤

    万次阅读 2012-02-09 20:50:36
    基于TCP的socket编程是采用的流式套接字。 服务器端编程的步骤: 1:加载套接字库,创建套接字(WSAStartup()/socket()); 2:绑定套接字到一个IP地址和一个端口上(bind()); 3:将套接字设置为监听模式
  • 基于Socket网络编程基本步骤

    千次阅读 2017-11-18 14:28:31
    (1)创建Socket。 (2)打开连接到Socket的输入/输出流。 (3)按照一定的协议对Socket进行读/写操作(这步很关键)。 (4)关闭打开的输入/输出流。 (5)关闭Socket
  • socket编程步骤

    千次阅读 2007-04-04 01:50:00
    服务器端过程就是socket->bind->listen->accpet->Read,write而对于客户端则是socket->connect->read,write
  • socket 编程基本步骤

    千次阅读 2013-09-03 10:26:04
    基于TCP的socket编程是采用的流式套接字。 服务器端编程的步骤: 1:加载套接字库,创建套接字(WSAStartup()/socket()); 2:绑定套接字到一个IP地址和一个端口上(bind()); 3:将套接字设置为监听
  • socket网络编程流程

    2020-06-12 21:51:53
    服务器端编程步骤: 1:创建套接字 int socket(int domain,int type,int protocol); domain告诉系统使用哪个底层协议组,PF_INET或者PF_INET6,对于本地域协议设置为PF_UNIX; type指定服务类型,流式SOCK_...
  • 基于TCP和UDP的Socket编程步骤

    千次阅读 2018-05-14 08:49:03
    java为TCP和UDP两种通信协议提供了相应的Socket编程类,这些类存放在java.net包中。...基于TCP协议的Socket编程的主要步骤: TCP server: 1.构建一个ServerSocket实例,指定本地的端口,用于监听其连接请求。 ...
  • 1 .socketfd = socket(........); 返回一个socket文件句柄 2.设置套接字 setsockopt(socketfd , SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)) < 0) // int on =1;SO_REUSEADDR表示可以重复使用一个端口 3. ...
  • vc中socket编程步骤

    2011-03-21 15:24:00
    基于TCP的socket编程是采用的流式套接字。在这个程序中,将两个工程添加到一个工作区。要链接一个ws2_32.lib的库文件。服务器端编程的步骤:1:加载套接字库,创建套接字(WSAStartup()/socket());2:绑定套接字到一...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 64,734
精华内容 25,893
关键字:

socket编程步骤