socket编程-tcp

server.py

import socket

phone = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  # 第一个参数为套接字的地址家族AF_INET代表网络套接字,第二个参数SOCK_STREAM代表tcp协议
phone.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)  #  当服务端关闭时,再重启服务端,有时地址还没有释放,会出现Address already in use,可以通过设置SO_REUSEADDR重新使用地址,来避免此错误
phone.bind((‘127.0.0.1‘, 8080))  # 监听当前服务器的ip地址与端口号
phone.listen(5)  # 最大可以挂起5个连接 (backlog池中最大可有5个连接),后面的连接就无法连接
while True:  # 循环接受客户端的连接,保证同时可以和多个客户端通信
    conn, addr = phone.accept()  # 得到一个tcp连接,等待客户端通过tcp三次握手
    print(
        conn)  # <socket.socket fd=196, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=(‘127.0.0.1‘, 8080), raddr=(‘127.0.0.1‘, 49851)>
    print(addr)  # (‘127.0.0.1‘, 49851)
    # conn 保存的是双向链接 ,addr保存的是客户端的ip地址及端口号

    while True:  # 循环进行发送和接收信息
        try:
            msg = conn.recv(1024)  # 等待客户端发消息
            if not msg: break  # mac系统在客户端强制断开时,不会捕捉异常,要使用此方法
            print(‘客户端发来的消息是:‘, msg.decode(‘utf-8‘))
            conn.send(msg.upper())  # 将客户端发来的信息大写后向客户端发送
        except Exception:  # 这里捕捉客户端强制退出的异常,如果客户端强制退出,则
            break

conn.close()  # 通过tcp四次挥手关闭tcp连接
phone.close()  # 关闭创建的socket对象

client.py

from socket import *

phone = socket(AF_INET, SOCK_STREAM)  # 第一个参数为套接字的地址家族AF_INET代表网络套接字,第二个参数SOCK_STREAM代表tcp协议
phone.connect((‘127.0.0.1‘, 8080))  # 连接服务器的ip地址与端口号

while True:
    msg = input(‘===>‘).strip()
    if not msg: continue    # 如果客户端发送的为空信息,那么消息不会发到服务端去,服务端无法从自己那一段的内核态中找到信息,就会卡住,因此要判断客户端输入的数据
    phone.send(msg.encode(‘utf-8‘))  # 将客户端发送的信息转为二进制
    data = phone.recv(1024)  # 等待服务端发消息
    print(‘收到服务端发来的消息‘, data.decode(‘utf-8‘))

phone.close()  # 关闭客户端连接

原文地址:https://www.cnblogs.com/dangrui0725/p/9478623.html

时间: 2024-11-07 09:02:09

socket编程-tcp的相关文章

python socket编程 TCP

python socket编程 TCP by wuxy server.py import socket import commands BUF_SIZE = 1024 server_addr = ('127.0.0.1',8888) server = socket.socket(socket.AF_INET,socket.SOCK_STREAM) server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) server.bind(se

socket编程——TCP

上篇文章中对一些函数有了详细的介绍,本篇使用这些函数来实现基于TCP的socket编程 服务器程序端: #include <iostream> #include <unistd.h> #include <stdlib.h>                                                              #include <errno.h> #include <string> #include <st

Socket编程(TCP/UDP) - 初学(C语言)

Socket socket函数 TCP代码实现 TCP Server TCP Client UDP代码实现 UDP Server UDP Client Socket 先介绍一下socket的启动过程: 根据连接启动的方式以及本地套接字要连接的目标,套接字之间的连接过程可以分为三个步骤:服务器监听,客户端请求,连接确认. (1)服务器监听:是服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态. (2)客户端请求:是指由客户端的套接字提出连接请求,要连接的目标是服务器

Socket编程--TCP粘包问题

TCP是个流协议,它存在粘包问题 产生粘包的原因是: TCP所传输的报文段有MSS的限制,如果套接字缓冲区的大小大于MSS,也会导致消息的分割发送. 由于链路层最大发送单元MTU,在IP层会进行数据的分片. 应用层调用write方法,将应用层的缓冲区中的数据拷贝到套接字的发送缓冲区.而发送缓冲区有一个SO_SNDBUF的限制,如果应用层的缓冲区数据大小大于套接字发送缓冲区的大小,则数据需要进行多次的发送. 粘包问题的解决 ①:发送定长包 这里需要封装两个函数: ssize_t readn(int

python基础之socket编程(TCP三次握手和四次挥手)

TCP协议中中的三次握手和四次挥手 建立TCP需要三次握手才能建立,而断开连接则需要四次握手.整个过程如下图所示: 先来看看如何建立连接的. 首先Client端发送连接请求报文,Server段接受连接后回复ACK报文,并为这次连接分配资源.Client端接收到ACK报文后也向Server段发生ACK报文,并分配资源,这样TCP连接就建立了. 那如何断开连接呢?简单的过程如下: [注意]中断连接端可以是Client端,也可以是Server端. 假设Client端发起中断连接请求,也就是发送FIN报

网络层、传输层、应用层、端口通信协议编程接口 - http,socket,tcp/ip 网络传输与通讯知识总结

引: http://coach.iteye.com/blog/2024511 什么是TCP和UDP,以及二者区别是什么? TCP的全称为传输控制协议.这种协议可以提供面向连接的.可靠的.点到点的通信. UDP全称为用户数据报协议,它可以提供非连接的不可靠的点到多点的通信. 使用TCP还是UDP,那要看你的程序注重哪一个方面,可靠(tcp)还是快速(udp). TCP/IP 建立连接的过程 手机能够使用联网功能是因为手机底层实现了TCP/IP协议,可以使手机终端通过无线网络建立TCP连接.   

网络编程——基于TCP协议的Socket编程,基于UDP协议的Socket编程

Socket编程 目前较为流行的网络编程模型是客户机/服务器通信模式 客户进程向服务器进程发出要求某种服务的请求,服务器进程响应该请求.如图所示,通常,一个服务器进程会同时为多个客户端进程服务,图中服务器进程B1同时为客户进程A1.A2和B2提供服务. Socket概述 ①   所谓Socket通常也称作“套接字”,用于描述IP地址和端口,是一个通信链的句柄.应用程序通常通过“套接字”向网络发出请求或者应答网络请求. ②   Socket是连接运行在网络上的两个程序间的双向通信的端点. ③  

基于socket的TCP和UDP编程

一.概述 TCP(传输控制协议)和UDP(用户数据报协议是网络体系结构TCP/IP模型中传输层一层中的两个不同的通信协议. TCP:传输控制协议,一种面向连接的协议,给用户进程提供可靠的全双工的字节流,TCP套接口是字节流套接口(STream socket)的一种. UDP:用户数据报协议.UDP是一种无连接协议.UDP套接口是数据报套接口(datagram Socket)的一种. 二.TCP和UDP介绍 1)基本TCP客户—服务器服务器 服务器是指在网络环境下运行相应的应用软件,为网上用户提供

1.socket编程:socket编程,网络字节序,函数介绍,IP地址转换函数,sockaddr数据结构,网络套接字函数,socket相关函数,TCP server和client

 1  Socket编程 socket这个词可以表示很多概念: 在TCP/IP协议中,"IP地址+TCP或UDP端口号"唯一标识网络通讯中的一个进程,"IP 地址+端口号"就称为socket. 在TCP协议中,建立连接的两个进程各自有一个socket来标识,那么这两个socket组成的socket pair就唯一标识一个连接.socket本身有"插座"的意思,因此用来描述网络连 接的一对一关系. TCP/IP协议最早在BSD UNIX上实现,