11.网络编程:socket、服务端、客户端

socket:

  • socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求。
  • python中使用socket来进行网络连接传输
  • 由图可知:

    socket中客户端需要进行的操作是:建立,连接,传输数据 ,接收数据,关闭连接

    服务端需要进行的操作是:建立,绑定IP地址和端口,等待连接,接收数据,传输数据 ,关闭连接


    服务端:

    • 建立:socket.socket()
    • 绑定端口:bind((‘IP地址‘,端口)),其中地址和端口号是一个 tuple
    • 监听:listen()
    • 接受连接:accept(),返回值是一个连接实例和一个地址,地址是连接过来的客户端地址,而数据操作要利用这个连接实例
    • 传输数据:send(),传输的数据必须是字节流,所以对字符串数据需要使用encode()
    • 接收数据read:recv(x),传输的数据必须是字节流,x是接收的字节数,如果需要转成Unicode,需要使用decode()
    • 关闭连接close:close()
    import socket
    server=socket.socket()#建立socket
    
    server.bind((‘localhost‘,1234))#绑定
    server.listen()#监听
    print("开始等待。。。")
    conn,addr=server.accept()#接收连接
    print("连接成功")
    data=conn.recv(1024)#接收数据
    print(data.decode())
    conn.send(data)#发送数据
    
    server.close()#关闭连接
    
    print("--------------------")
    • 上述代码存在一个问题:只能接受一次连接,连接结束后,服务端socket将关闭,更改成不立即关闭能等待下一个连接的:
    #服务器端
    
    import socket
    server = socket.socket()
    server.bind((‘localhost‘,1234)) #绑定ip和端口
    server.listen(5) #监听
    
    print("开始等待")
    while True:
        conn, addr = server.accept()
        print(conn, addr)
        print("客户端连接")
        while True:
            data = conn.recv(1024)
            print("recv:",data)
            if not data:
                print("连接断开...")
                break
            conn.send(data)
    
    server.close()

    客户端:

    • 建立:socket.socket()
    • 连接:connect((‘IP地址‘,端口)),其中地址和端口号是一个 tuple
    • 传输数据:send(),传输的数据必须是字节流,所以对字符串数据需要使用encode()
    • 接收数据recv:recv(),传输的数据是字节流,如果需要转成Unicode,需要使用decode()
    • 关闭连接close:close()
    import socket
    client=socket.socket()#建立socket
    client.connect((‘localhost‘,1234))#连接
    client.send("你好".encode())#发送数据
    data=client.recv(1024)#接收数据
    print(data.decode())
    
    client.close()#关闭连接
    • 上述代码存在一个问题:只能发送一次数据,发生完数据就会断开连接,改成可以多次发送数据,不自动断开的【前提是服务端能接收多次】:
    import socket
    
    client=socket.socket()
    
    client.connect((‘localhost‘,1234))
    while True:
        cmd=input(">>")
        if len(cmd)==0:
            continue
        client.send(cmd.encode())
        cmd_res=client.recv(1024)
        print(cmd_res.decode())
    
    client.close()

    原文地址:https://www.cnblogs.com/progor/p/8428653.html

    时间: 2024-10-10 14:47:53

    11.网络编程:socket、服务端、客户端的相关文章

    第5章-unix网络编程 TCP/服务端程序示例

    这一章主要是完成一个完整的tcp客户/服务器程序.通过一很简单的例子.弄清客户和服务器如何启动,如何终止,发生了某些错误会发生什么.这些事很重要的 客户端代码 #include "unp.h" //static void str_cli1(FILE*fp,int sockfd); int main(int argc,char *argv[]) { int sockfd; struct sockaddr_in servaddr; sockfd=Socket(AF_INET,SOCK_ST

    python twisted socket 服务端 客户端

    使用twisted搭建socket的服务器,并能给客户端发送消息, 比较简单,直接上代码 #coding=utf-8 '''用于实现给响应客户端的请求,并且可以给客户发送消息,''' from twisted.internet import reactorfrom twisted.internet.protocol import Protocol, Factoryimport timeimport thread #线程体,def timer(no, interval):    while Tru

    Java网络编程(TCP服务端)

    1 package WebProgramingDemo; 2 3 import java.io.IOException; 4 import java.io.InputStream; 5 import java.net.ServerSocket; 6 import java.net.Socket; 7 8 public class ServerSocketDemo { 9 10 /** 11 * @param args 12 * @throws IOException 13 */ 14 publi

    java socket 服务端 客户端

    Server package com.witwicky.socket.basicsocket; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; public class Server { public static void main(String[] args) {

    Java网络编程【Socket服务端和客户端】

    Socket 编程大家都不陌生,Java 学习中必学的部分,也是 Java网络编程核心内容之一.Java 网络编程又包括 TCP.UDP,URL 等模块.TCP 对应 Socket模块,UDP 对应 DatagramPacket 模块.URL 对应 URL 模块.其中 TCP 和 UDP 是网络传输协议,TCP 是数据流传输协议,UDP 是数据包传输协议.两者之间的异同就不在这里说了,推荐一本入门书籍 <TCPIP入门经典>.我们开始 Socket 服务端和客户端编程吧. 一.Socket 服

    TCP/IP网络编程之基于TCP的服务端/客户端(二)

    回声客户端问题 上一章TCP/IP网络编程之基于TCP的服务端/客户端(一)中,我们解释了回声客户端所存在的问题,那么单单是客户端的问题,服务端没有任何问题?是的,服务端没有问题,现在先让我们回顾下服务端的I/O代码 echo_server.c --while ((str_len = read(clnt_sock, messag, 1024)) != 0) write(clnt_sock, messag, str_len);-- 接着,我们回顾客户端的代码 echo_client.c -- wr

    [javaSE] 网络编程(TCP服务端客户端互访阻塞)

    客户端给服务端发送数据,服务端收到数据后,给客户端反馈数据 客户端: 获取Socket对象,new出来,构造参数:String的ip地址,int的端口号 调用Socket对象的getOutputStream()方法,获取到OutputStream对象 调用OutputStream对象的write()方法,输出流输出数据,参数:byte[]字节数组 调用Socket对象的getInputStream()方法,获取到InputStream对象 调用InputStream对象的read()方法,读取数

    C# Socket服务端和客户端互相send和receive

    服务端 1 using System; 2 using System.Collections.Generic; 3 using System.Text; 4 using System.Net.Sockets; 5 using System.Net; 6 using System.Threading; 7  8 namespace Controller 9 {10     public static class SocketServer11     {12         private stat

    使用NewLife网络库构建可靠的自动售货机Socket服务端(一)

    最近有个基于tcp socket 协议和设备交互需求,想到了新生命团队的各种组件,所以决定用NewLife网络库作为服务端来完成一系列的信息交互. 第一,首先说一下我们需要实现的功能需求吧 1,首先客户有一堆自动售货机的设备,设备连接socket服务端后 定时发送设备实时状态作为心跳信息,并且服务端需要下发信息予以确认. 2,需要知道设备的实时在线状态 3,设备需要实现微信,支付宝扫码支付需求,当客户买东西的时候选择扫码支付时,设备上报产品价格信息,支付方式,服务器下发微信或者支付宝的当面付二维