Tag: 套接字

TCP_NODELAY如何影响连续的write()调用?

TCP_NODELAY是一个选项,可以快速发送TCP数据包,无论其大小如何。 当速度很重要时,这是非常有用的选项,但是,我很好奇它会对此做些什么: Socket socket = [some socket]; socket.setTcpNoDelay(true); OutputStream out = socket.getOutputStream(); out.write(byteArray1); out.write(byteArray2); out.write(byteArray3); out.flush(); 我试图在SocketOutputStream上找到flush实际上做了SocketOutputStream ,但据我所知,它什么也没做。 我曾希望它会告诉套接字“现在发送所有缓冲的数据”,但不幸的是,不,它没有。 我的问题是:这些3字节数组是在一个数据包中发送的吗? 我知道你对TCP构造网络数据包的方式没有多少控制权,但有没有办法告诉套接字(至少尝试)打包这些字节数组,这样可以避免网络开销? 可以手动打包字节数组并在一次调用中发送它们来write帮助吗?

通过Java发送电子邮件 – javax.mail.MessagingException:无法连接到SMTP主机:localhost,port:587;

我目前正在开发一个涉及创建.jar文件的项目。 以下是要实现的,我应该导出/读取朋友注册表的路径,一旦完成,我应该通过电子邮件返回结果。 整个概念是创建jar文件,一旦点击它,我通过我的电子邮件获得结果,因为我实际上是通过电子邮件发送的。 (我希望这是有道理的) 首先,我结合以下代码实际读取注册表并显示键(我从读取/写入注册表的堆栈溢出的流行post得到它)所以读取过程工作正常,现在我的问题是与电邮代码, (我不太确定这个代码的原始所有者是谁,但完全归功于他)我试图让这个电子邮件代码的基本概念起作用,这样我就可以继续将我的jar文件发送为附件并以用户点击jar文件的方式将其链接到我的代码,注册表结果将通过电子邮件发送给我。 import java.util.Properties; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.PasswordAuthentication; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.AddressException; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; public class MailCode { public static void main(String[] args) throws Exception { final String smtp_host = “smtp.gmail.com”; final String smtp_username = “user@gmail.com”; final String smtp_password = “password”; final String smtp_connection = […]

BufferedReader readLine方法挂起并阻止程序

我正在尝试使用Java学习套接字,并且我成功地将数据发送到在我自己的机器上运行的ServerSocket。 当我尝试使用readline从这个套接字读取时(所以我可以回显我自己发送的消息)我的程序挂起并且不会返回。 这是代码: public static void main(String[] args) throws UnknownHostException, IOException { TCPClient cli = new TCPClient(“127.0.0.1”, “15000”); try { cli.ostream.writeUTF(“Teste”); String echo = cli.istream.readLine(); //it hangs in this line System.out.println(echo); } TCPClient是我定义的类,所以我可以在我的homwework上使用swing之前在更简单的界面上测试我的程序。 这是代码: public class TCPClient { public DataOutputStream ostream = null; public BufferedReader istream = null; public TCPClient(String host, String port) throws UnknownHostException […]

如何在Java中将数组写入outputStream

我想通过Socket发送多个随机值。 我认为数组是发送它们的最佳方式。但是我不知道如何将数组写入Socket outputStream? 我的java类 import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.Socket; import java.io.*; import java.util.Random; class NodeCommunicator { public static void main(String[] args) { try { Socket nodejs = new Socket(“localhost”, 8181); Random randomGenerator = new Random(); for (int idx = 1; idx <= 1000; ++idx){ Thread.sleep(500); int randomInt = randomGenerator.nextInt(35); sendMessage(nodejs, randomInt + […]

维护Arduino和Java程序之间的通信

我在学校里有一个项目,包括一辆可以通过WiFi控制的遥控车。 它工作正常几秒钟,但它只是停止连接并尝试再次重新连接。 事实是,如果我正在制造依赖于不稳定连接的汽车,它可能会导致事故。 无论是对自己还是对个人。 也许我做错了什么? 我的问题是,我如何始终保持该连接的活动状态? 到目前为止,这是我的程序: Arduino客户: #include #include int status = WL_IDLE_STATUS; char ssid[] = “mynet”; char pass[] = “password”; IPAddress remoteIp(192,168,80,165); int port = 37899; String message = “”; WiFiClient client; void setup() { // start the serial for debugging Serial.begin(9600); pinMode(9, OUTPUT); digitalWrite(9, LOW); //check if the wifi shield is present […]

如何使用IP地址和端口号连接到服务器套接字(客户端在与服务器不同的机器上运行)

客户端程序 public class client implements Runnable { protected static String server_IP = “141.117.57.42”; private static final int server_Port = 5555 ; protected static String client_IP ; public static void main(String[] args) throws IOException{ final String host = “localhost”; int init = 0 ; try { InetAddress iAddress = InetAddress.getLocalHost(); client_IP = iAddress.getHostAddress(); System.out.println(“Current IP address […]

如何在Java中使用ICMP和traceroutes

Java没有ICMP和traceroute的原语。 怎么克服这个? 基本上我正在构建应该在* nix和Windows中运行的代码,并且需要一段将在两个平台上运行的代码。

Java ServerSocket连接限制?

我正在使用套接字运行一些测试,我遇到了一些奇怪的行为:ServerSocket将在第50个客户端Socket连接到它之后拒绝连接,即使该客户端套接字在下一个客户端套接字打开之前关闭,即使延迟是在连接之间添加。 以下程序是我的实验代码,它在当前状态下不会抛出任何exception并正常终止。 但是,如果Socket[] clients的数组大小增加到50以上,则在第50个连接之后尝试连接的任何客户端套接字都会被服务器套接字拒绝。 问题: 为什么50是服务器套接字拒绝套接字连接的计数? public static void main(String[] args) { try (ServerSocket server = new ServerSocket(2123)) { Socket[] clients = new Socket[50]; for (int i = 0; i < clients.length; i++) { clients[i] = new Socket("localhost", 2123); System.out.printf("Client %2d: " + clients[i] + "%n", i); clients[i].close(); } } catch (Exception e) { e.printStackTrace(); […]

Java套接字通过Internet超时

我创建了一个小型聊天程序,当客户端和服务器在同一台计算机(也可能是网络)上运行时,它可以完美运行。 但是,只要我尝试通过互联网连接到另一台计算机,套接字连接就会超时。 这是因为防火墙/路由器等吗? 我如何通过互联网连接ServerSocket和Socket?

从html表单读取POST数据发送到serversocket

我尝试在Java中编写最简单的服务器应用程序,显示带有textarea输入的html表单,在提交后,我可以解析在该textarea中键入的xml。 现在我构建基于serversocket的简单服务器: import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; public class WebServer { protected void start() { ServerSocket s; String gets = “”; System.out.println(“Start on port 80”); try { // create the main server socket s = new ServerSocket(80); } catch (Exception e) { System.out.println(“Error: ” + e); return; } System.out.println(“Waiting for […]