本来是用Java做一个在线编程功能,这里需要用到socket接收和发送数据,当我做好Python在线变成,正做Java的时候问题来了,因为Java是将整个代码事先编译运行,而不是那种足行执行,而我在线编程要求的是先将Java编译成class文件,然后执行,而我使用Java做socket服务端的时候它执行的时候会生成.class文件,而它本身却检测不到当前目录下有.class文件,因为它事先已经编译好了,已经得到了结果,所以这时就尴尬了,我纠结了很久,查阅很多资料也没办法(应该是我太菜)
所以最后我选择用Python做服务端,因为它是逐行执行的,而且简单(主要还是我不会C语言那些),那么代码也很简单,这里值得注意的是因为各个语言之间的差别,所以我们必须使用字节码进行传输,具体的不用我多说大家也都懂为什么吧,就直接上代码
Java客户端:
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
public class Main {
public static void main(String[] args){
Socket socket = null;
String Code_Adress = "127.0.0.1";
try {
socket = new Socket(Code_Adress,9007);
OutputStream outputStream = socket.getOutputStream();
InputStream inputStream = socket.getInputStream();
byte[] bytes = new byte[1024];
outputStream.write("我是JAVA客户端".getBytes());
int len = inputStream.read(bytes);
String str = new String(bytes,0,len);
System.out.println(str);
} catch (IOException e) {
e.printStackTrace();
}
}
}
Python服务端:
import socketserver
class myTCPhandler(socketserver.BaseRequestHandler):
def handle(self):
while True:
self.data = self.request.recv(1024).decode('UTF-8', 'ignore').strip()
if not self.data : break
print(self.data)
self.feedback_data =("回复\""+self.data+"\":\n\t你好,我是Server端").encode("utf8")
print("发送成功")
self.request.sendall(self.feedback_data)
host = '127.0.0.1'
port = 9007
server = socketserver.
ThreadingTCPServer((host,port),myTCPhandler)
server.serve_forever()
运行结果大概就是这样的