长话短说,我从GeeksForGeeks窃取并修改了一些代码来练习套接字。运行为localhost修改的代码在桌面上工作得很好,但是当修改并尝试在Heroku上托管时,我似乎无法在服务器和客户端之间建立连接。服务器似乎在Heroku上启动和运行良好,并且记录了我甚至没有做的连接(不知道这些连接来自哪里)。另一方面,客户端似乎连接,但当我发送消息时不做任何事情。服务器甚至没有记录我尝试的连接,所以我知道它可能甚至没有连接。
服务器代码:https://github.com/RenegadeB5/socket in/src/main/java/
客户机代码:
import java.io.*;
import java.net.*;
import java.util.Scanner;
public class Client
{
public static void main(String args[]) throws UnknownHostException, IOException
{
Scanner scn = new Scanner(System.in);
// establish the connection
Socket s = new Socket("<my app name>.herokuapp.com", 80);
// obtaining input and out streams
DataInputStream dis = new DataInputStream(s.getInputStream());
DataOutputStream dos = new DataOutputStream(s.getOutputStream());
// sendMessage thread
Thread sendMessage = new Thread(new Runnable()
{
@Override
public void run() {
while (true) {
// read the message to deliver.
String msg = scn.nextLine();
try {
// write on the output stream
dos.writeUTF(msg);
} catch (IOException e) {
e.printStackTrace();
}
}
}
});
// readMessage thread
Thread readMessage = new Thread(new Runnable()
{
@Override
public void run() {
while (true) {
try {
// read the message sent to this client
String msg = dis.readUTF();
System.out.println(msg);
} catch (IOException e) {
e.printStackTrace();
}
}
}
});
sendMessage.start();
readMessage.start();
}
}
我已经尝试了很多不同的组合和解决方案,但找不到任何这样做的例子。我想知道我做错了什么,这样我就能从头痛中走出来。提前感谢!
Java Socket和ServerSocket使用TPC, Heroku不免费支持。因此,服务器将正常运行,但是任何通过TCP发送的内容,包括连接尝试,都不会发送到您的服务器,除非它们通过http完成。