赞
踩
Python作为Server(服务端)
- host = "192.168.xx.xxx" #服务端的IP地址
- port = 2027 #选定一个没有被使用的端口号用来通信
- print('localhost ip :' + host)
- #创建socket对象,当使用tcp时使用socket.SOCK_STREAM该参数,流式socket
- tcpServer = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- tcpServer.bind((host, port))#将套接字与IP、port进行绑定
- tcpServer.listen(5) #开始监听,等待客户端连接
- #接受连接请求并返回一个新的套接字,client返回的是一个新的套接字对象,addr返回的是客户端地址
- (client, addr) = tcpServer.accept()
- print('accept the client!')
- while True: #开循环一直等待接收客户端数据
- data = client.recv(1024) #接受数据,参数为指定接受的最大数据量
- data = bytes.decode(data) #对数据进行解码,默认方式为UTF-8
- print(data)
socket()返回的套接字是用于监听和接受客户端的连接请求的,accept()返回的套接字是用来发送和接受数据的。因为上述没有用setblocking()函数设置阻塞状态,所以默认情况下accept()函数在没有收到连接请求的时候会一直阻塞等待连接请求,只有收到了一个连接请求程序才会往下执行,同样,recv()函数在没有收到数据的时候也会进入阻塞状态。
若不知道选用的端口是否被占用,可以在cmd中输入 netstat -ano|findstr "端口号" 命令来查看
若想关闭占用该端口的进程,可以利用 taskkill /pid 564 /f 命令关闭进程
Java作为client(客户端)
- public class TcpSend {
- public static void main(String []args) {
- String ip = "192.168.43.3"; //服务器端IP地址
- int port = 2027; //端口号
- Socket s = null; //创建Socket对象
- try{
- s = new Socket(ip, port); //绑定IP和port
- s.setSendBufferSize(1000); //设置发送缓存区大小
- //发送数据给服务端
- BufferedWriter out = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
- out.write("Request");
- out.flush();
- s.close();
- }
- catch(Exception e){
- e.printStackTrace();
- }
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。