套接字端口重用

用python编写socket程序, 在指定端口上监听服务:

import socket

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
port = 8080
sock.bind((‘‘, port))
sock.listen(1)
print ‘listening on port: %s‘ % port
while True:
    try:
        conn, addr = sock.accept()
        print ‘connected by %s:%s‘ % (addr[0], addr[1])
    except KeyboardInterrupt:
        break
    except socket.error, msg:
        print ‘%s‘ % msg

在端口上提供套接字服务,连接之后终止程序运行,再次运行程序时,程序会出现错误提示:
...
socket.error: [Errno 48] Address already in use

可以通过设置套接字重用选项SO_REUSEADDR来解决上述问题,如:

import socket

port = 8080
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
server.bind((‘‘, port))
server.listen(1)
print ‘listening on port: %s‘ % port
while True:
    try:
        conn, addr = server.accept()
        print ‘connected by %s:%s‘ % (addr[0], addr[1])
    except KeyboardInterrupt:
        break
    except socket.error, msg:
        print ‘%s‘ % msg

提示:
import socket

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

state = sock.getsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR) # 获取套接字SO_REUSEADDR选项状态
print ‘state state: %s‘ % state

sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) #设置套接字选项
state = sock.getsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR)
print ‘state state: %s‘ % state

注: 可以使用telnet命令调试

www.pythonfan.org

时间: 2024-11-25 18:26:54

套接字端口重用的相关文章

Java如何使服务器允许连接到套接字端口?

在Java编程中,如何使服务器允许连接到套接字端口? 以下示例显示如何使服务器通过使用ServerSocket类的server.accept()方法和Socket类的sock.getInetAddress()方法来允许连接到套接字端口:`1234. package com.yiibai; import java.io.IOException; import java.net.InetAddress; import java.net.ServerSocket; import java.net.So

TCP套接字端口复用SO_REUSEADDR

下面建立的套接字都是tcp套接字 1.进程创建监听套接字socket1,邦定一个指定端口,并接受了若干连接.那么进程创建另外一个套接口socket2,并试图邦定同一个端口时候,bind错误返回“Address already in use”(即使使用了SO_REUSEADDR). 2.进程创建监听套接字,邦定一个指定端口,并接受了若干连接,为每个连接创建子进程为连接服务.杀死监听套接字所在进程,然后重新启动.重新启动的进程调用bind重新建立监听套接字.这次邦定只有在bind前指定了SO_REU

《UNIX网络编程》之多客户连接服务端,可重用套接字对

该网络编程之客户端与服务端程序模板支持: 1. 多客户端同时连接服务端,即服务程序可以同时为多个客户端服务: 2. 服务端支持套接字对重用,即即使处于TIME_WAIT状态,仍可支持服务端重启: 3. 服务端可以发现客户端是否已断开连接: 4. 支持客户端标准输入会显,服务端从标准输出显示客户端所输入内容. 程序如下,记下该模板以备再次使用: 客户端程序如下: /*******************************************************************

Python网络编程—套接字属性

socket套接字属性 [1] sockfd.type 套接字类型 [2] sockfd.family 套接字地址类型 [3] sockfd.getsockname() 获取套接字绑定地址 [4] sockfd.fileno() 获取套接字的文件描述符 [5] sockfd.getpeername() 获取连接套接字客户端地址 [6] sockfd.setsockopt(level,option,value)功能:设置套接字选项参数: level 选项类别 SOL_SOCKEToption 具体

网络套接字与寻址

1 套接字描述 套接字是通信端点的抽象,创建一个套接字使用如下函数: #include <sys/socket.h> int socket(int domain, int type, int protocol); 返回值:若成功,返回套接字描述符:若出错,返回-1. 参数: domain: 指定通信的特征,包括地址格式,以AF_开头的常数表示地址族(address family): 域 描述 AF_INET IPv4因特网域 AF_INET6 IPv6因特网域 AF_UNIX UNIX域 AF

TCP 错误代码 10013: 试图以其访问权限所禁止的方式访问套接字

大家遇到的问题可能是登录没反应,这时,大家要充分利用调试工具,调试工具可能会提示下面错误: 未能连接到 net.tcp://swk-pc:4502/chatservice.svc.连接尝试的持续时间为 00:00:00.3880222.TCP 错误代码 10013: 试图以其访问权限所禁止的方式访问套接字.原因可能是,试图以跨域的方式访问某服务,而该服务的配置不支持跨域访问.您可能需要与服务的所有者联系,以公开通过 HTTP 的套接字跨域策略,并在允许的套接字端口范围 4502-4534 之内承

Linux 进程间通信(二)(网络IPC:套接字)

socket描述符 套接字是通信端点的抽象,创建一个套接字使用如下函数: #include <sys/socket.h> int socket(int domain, int type, int protocol); 返回值:若成功,返回套接字描述符:若出错,返回-1 说明: domain: 指定通信的特征,包括地址格式,以AF_开头的常数表示地址族(address family): 域 说明 AF_INET IPv4因特网域 AF_INET6 IPv6因特网域 AF_UNIX UNIX域 A

套接字与套接字编程

一.套接字 端口:标记不同的网络进程:使用16位比特位表示. { IP : Port} ----- 来表示某一主机的具体进程是什么 ----  套接字(socket) 套接字:是抽象概念,表示TCP连接的一端:通过套接字可以进行数据的发送或接收 TCP连接由两个套接字组成: TCP = { Socket1  : Socket2 } = {{ IP:Port } { IP:Port }} 一个IP可以有多个套接字. 套接字编程: 二.套接字编程 服务端(被动连接的一方)             

2017.07.09 Python网络编程之重用套接字地址

1.重用套接字地址: # -*- coding: UTF-8 -*-# 如果在某个端口上运行一个Python套接字服务器,连接一次后便终止了运行,就不能在使用这个端口了# !usr/bin/env python# Python Network Programming Cookbook --Chapter -1# This program is optimized for Python 2.7# It may run on any other version with/without modifi