网络编程之udp和tcp

1.window查看 网卡信息

2.IP地址的分类

 

一.udp相关知识

 

网络编程之udp和tcp

3.端口

网络编程之udp和tcp

 

4.进程

5.socket:(套接字)

网络编程之udp和tcp

创建一个socket

网络编程之udp和tcp

udp发送数据:

网络编程之udp和tcp

网络编程之udp和tcp

 

#具有退出循环功能的发送数据

import  socket

def  main():

    #创建一个udp套接字

    udp_socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

    while True:

        #可以使用套接字发送数据

        #udp_socket.sendto("hahhaha",对方的Ip以及port(接口号))

        send_data = input("请输入你想要发送的信息....")

        if   send_data =="exit":

            break

        udp_socket.sendto(send_data.encode("utf-8"),("192.168.33.53",8080))

        #关闭套接字

    udp_socket.close()

if __name__ == "__main__":

    main(

重点:接受udp数据

 

网络编程之udp和tcp

 

重点   接口绑定的问题

网络编程之udp和tcp

 

注:1:发送信息端口可以是随机的,不一定要绑本地信息,但是接受数据的话就要绑定本地信息。

        2.同一个端口不能在同一时刻被用两次。

 

输入对方的IP,port,全双工,半双工,单工等

 

网络编程之udp和tcp

网络编程之udp和tcp

socket是属于全双工

 

 

二.TCP相关知识(重点)

 

特点:

1.面向连接

2.可靠传输

   a tcp采用发送应答机制

   b  超时重传

   c   错误检验

   d  流量控制和阻塞管理

 

网络编程之udp和tcp

TCP客户端

import socket

def  main():

    #1.创建套接字

    tcp_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

    # 2连接服务器

    #tcp_socket.connect("192.168.33.11",7890)

    server_ip = input("请输入来连接的服务器的IP:")

    server_port = int(input("请输入要连接的服务器的port:"))

    server_addr = (server_ip,server_port)

    tcp_socket.connect(server_addr)

    # 3发送数据/接受数据

    send_data = input("请输入要发送的数据:")

    tcp_socket.send(send_data.encode("utf-8"))

    # 4关闭套接字

    tcp_socket.close()

    

    # 4关闭套接字

    

if __name__ =="__main__"():

    main()

 

 

 

TCP服务器:(重点)

# -*- coding: utf-

import socket

def  main():

    # 1.买个手机(创建套接字  socket)

    tcp_server_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

    # 2.插入手机卡(绑定本地信息 bind)

    tcp_server_socket.bind("",7890)

    # 3. 将手机设置为正常的响铃模式(让默认的他套接字洋由主动变为被动 lisen)

    tcp_server_socket.listen(128)

    print("-----------")

    # 4. 等待别人的电话到来(等待客户端i链接 accept)

    new_client_socket,client_addr = tcp_server_socket.accept()

    print(client_addr)

    # 接受客户端发送过来的请求

    recv_data = new_client_socket.recv(1024)

    print(recv_data)

    # 服务器给客户端发送消息

    new_client_socket.send("hahhahah我收到你发的消息啦".encode("utf-8"))

    #关闭套接字

    new_client_socket.close()

    tcp_server_socket.close()

if  __name__ =="__main__":

    main()

 

 

 

 

循环为多个客户端服务:

 

# -*- coding: utf-8 -*-

# -*- coding: utf-

import socket

def  main():

    # 1.买个手机(创建套接字  socket)

    tcp_server_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

    # 2.插入手机卡(绑定本地信息 bind)

    tcp_server_socket.bind("",7890)

    # 3. 将手机设置为正常的响铃模式(让默认的他套接字洋由主动变为被动 lisen)

    tcp_server_socket.listen(128)

    #循环目的:调用多次accpet,从而为多个客户端服务

    while True:

        print("等待一个新的客户的到来...")

       # 4. 等待别人的电话到来(等待客户端i链接 accept)

        new_client_socket, client_addr = tcp_server_socket.accept()

        print("一个新的客户端已经到来%s" %str(client_addr))

       # 循环的目的为多个客户端服务多次

        while True:

            # 接受客户端发送过来的请求

            recv_data = new_client_socket.recv(1024)

            print("客户端送过来的请求是:%s"%recv_data.decode("utf-8"))

            # 如果recv解堵塞,那么有两种方式

            # 1.客户端发送过来的数据

            # 2.客户端调用的close导致

            if  recv_data:

                

                # 服务器会送给客户端发送消息

                new_client_socket.send("hahhahah我收到你发的消息啦".encode("utf-8"))

            else:

                break

    #关闭套接字

    new_client_socket.close()

    tcp_server_socket.close()

if  __name__ =="__main__":

    main()

 

 

网络编程之udp和tcp

 

 

网络编程之udp和tcp

 

udp是不面向数据的通信,而tcp是

udp: socket   bind (收数据的话要绑定,发数据的话不用绑定) sendto/recvfrom    close

tcp客户端: socket  contect( )   send/recv  close  (一般不用绑定)

tcp服务器: socket  bind  listen  accpet ( ) recv/send   close