今天看一本Python黑客相关的书的第一章部分,边看边在Linux Ubuntu Kylin 32位系统的终端打Python代码,就基本会用Python语言了,包括socket内容。刚好我之前学习Java Socket通信,今天就试着用Python写客户端,并与Java服务器端通信,经过一些调试,最后成功了。Github根链接是:https://github.com/1040003585/javanettextbook/tree/master/Java_Python
——惠州学院13网络工程 吴成兵 20160621
目录
一 特别说明
1.1 Python写客户端特别说明
- indata=input():输入字符(串)数据为加引号,如:‘ab’;
- s.send(str(indata)+”\n”) :要加“\n”,这样就是完成发送一条数据过去;
- s.recv(1024).strip(‘\n’) :接收1024B大小的数据,最好过滤掉回车符号;
1.2 Java服务器端特别说明
1.2.1 接收数据特别说明
BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream()));
String string=br.readLine();
if(string==null)continue;
1.2.2 发送数据特别说明
PrintWriter pw=new PrintWriter(socket.getOutputStream(),true);
pw.println(string);
二 操作运行
2.1 操作步骤
- 确保linux系统安装了Java JDK和Python,即在Terminal终端中输入“java”、“javac”和“python”有正常反馈效果。
- 在同一个目录下,新建
Server.java
文件,并存放Java服务器端代码放;新建Client.py
,并存放Python代码。 - 在该目录打开Terminal终端,输入
javac Server.java
,编译服务器端代码,生成Server.class。 - 输入
java Server
运行服务器端,输入python Client.py
运行客户端。
2.2 运行截图
三 源代码
3.1 Python写客户端代码
import socket
socket.setdefaulttimeout(2)
s=socket.socket()
s.connect(("localhost",9955))
print("C:input data (with 'end' for exit the program)")
goon=True
while(goon):
print "C:-------------------------------------"
print "C:Please input data:"
indata=input()
s.send(str(indata)+"\n") #must add "\n"
data=s.recv(1024).strip('\n')
if "end"!=data :
print("C:receive result:"+data)
else:
goon=False;
print("C:end...")
s.close()
3.2 Java服务器端代码
import java.io.*;
import java.net.*;
import java.util.*;
public class Server {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("Swait for connect......");
try {
ServerSocket serverSocket = new ServerSocket(9955);
Socket socket=serverSocket.accept();
System.out.println("S connet from:"+socket.getInetAddress().getHostAddress());
//DataInputStream dis=new DataInputStream(socket.getInputStream());//dis.readUTF();// un success!
//DataOutputStream dos=new DataOutputStream(socket.getOutputStream());//dos.writeUTF(string);dos.flush();
BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream()));//br.readLine();// success...
PrintWriter pw=new PrintWriter(socket.getOutputStream(),true);//pw.println(string);
boolean goon=true;
while(goon){
//String string=dis.readUTF();
String string=br.readLine();
if(string==null)continue;
System.out.print("S:receive data:("+string+")");
if(string.equals("end")==false){
string=dealWith(string);
//dos.writeUTF(string);
//dos.flush();
pw.println(string);
System.out.println(" ,S:计算结果("+string+") sent...");
}else{
goon=false;
//dos.writeUTF("end");
//dos.flush();
pw.println("end");
System.out.println("\n");
}
}
serverSocket.close();
//dis.close();
//dos.close();
br.close();
pw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static String dealWith(String string){
double radius=0.0;
try {
radius=Double.parseDouble(string);
} catch (NumberFormatException e) {
return "NumberFormatException";
}
if(radius<0)return "data can't less 0";
double area=radius*radius*Math.PI;
return Double.toString(area);
}
}
Wu_Being博客声明:本人博客欢迎转载,请标明博客原文和原链接!谢谢!
《Java与Python套接字Socket通信的例子》:
http://blog.csdn.net/u014134180/article/details/51730369
如果你看完这篇博文,觉得对你有帮助,并且愿意付赞助费,那么我会更有动力写下去。