Tag: 套接字

Java套接字在连接到服务器期间发送一些数据

我有一个小型服务器和客户端java程序。 它们通过套接字进行交互。 Java服务器非常简单。 它从套接字接收字符并在控制台中打印它。 import java.net.*; import java.io.*; import java.util.Date; public class DataServerSIMS { static final int LISTENING_PORT = 2002; public static void main(String[] args) { ServerSocket listener; //Checks the connection requests Socket connection; //To interact with other progs Reader incoming; //Stream try { listener = new ServerSocket(LISTENING_PORT); TextIO.putln(“Listening on port “+LISTENING_PORT); while (true) { […]

Java – 使用Socket提取网站Html

下面的代码没有从url获取任何HTML URL url = new URL(“https://google.com”); Socket socket = new Socket(url.getHost(),443); socket.setSoTimeout(15000); BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream(),”UTF-8″)); String c = “”; while((c = reader.readLine())!=null) { System.out.print(c); } reader.close(); socket.close(); 我知道URLConnection方法openConnection()和URL类方法openStream(),但我不想使用它们。 所有我想知道的是为什么我没有使用Socket类得到任何输入,但我确实得到了使用其他方法的输入。

如何以二进制格式发送Java对象并在C服务器中接收?

我有一个Java对象,现在我想将其转换为二进制forms(二进制协议)并通过网络发送,C客户端将接收它并打印内容。 就像我有一个student.java类 学生.java import java.io.Serializable; public class Student implements Serializable { public String name; public int id; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getId() { return id; } public void setId(int id) { this.id = id; } } Client.java import java.io.BufferedReader; import java.io.DataOutputStream; […]

Java客户端PHP-Server UDP打孔示例代码

我正在开发一个需要ea p2p服务器的项目,但我还没有找到任何java-client php-server示例代码。 我理解udp打孔如何工作的概念,但我无法在代码中得到任何东西。 我尝试过的: TheSocket.java public class TheSocket { public static String response = “hello”; public static String request; public static String webServerAddress; public static ServerSocket s; protected static ServerSocket getServerSocket(int port)throws Exception{ return new ServerSocket(port); } public static void handleRequest(Socket s){ BufferedReader is; PrintWriter os; try{ webServerAddress = s.getInetAddress().toString(); is = new BufferedReader(new […]

将数据包广播到不在java中工作的客户端

我有多个发送器配置为当它们接收从服务器通过本地端口5255发送的广播数据包时发回响应,远程端口5252包含字符串“AST show me \ 0”(如发送者手册中所述)。 这应该可以帮助我扫描本地网络中的所有发射器。 我已经实现了一个服务器端代码来广播该字符串消息,但是当我运行代码时,它在以下行代码中有一个错误: socket.receive(packet1); 我真的不知道我在这段代码中做错了什么或遗漏了什么。 任何帮助将不胜感激。 注意:如果有帮助:发射器的IP地址是192.168.40。*; 服务器IP地址为192.168.40.254。 提前致谢 !! 这是代码: package socket_test; import java.io.*; import java.net.*; public class Server_UDP_Broadcast { //@SuppressWarnings(“null”) public static void main(String[] args) { // TODO Auto-generated method stub DatagramSocket socket = null; try{ socket = new DatagramSocket(5255); socket.setSoTimeout(10000); String str = “AST show me\0”; byte[] buf […]

用SocketChannel.open()。socket()替换新的Socket()有什么问题吗?

如果我只是替换,会出现什么问题 socket = new Socket() 同 socket = SocketChannel.open().socket()? 背景:我有一些使用new Socket()遗留代码,我希望能够中断socket.connect()调用。 我不想重写代码来使用NIO。 我了解到Thread.interrupt()不会中断socket.connect() ,但另一个线程上的socket.close()应该中断连接。 奇怪的是,这适用于Java 7但不适用于Java 6。 我莫名其妙地使用socket = SocketChannel().open().socket()会让我使用Thread.interrupt()来中断socket.connect() 。 它没有,但奇怪的是,它确实使Java 6中的socket.close()中断socket.connect() ! 请注意,我不是以任何方式直接使用附加的SocketChannel它出现在我创建Socket再也没有。 这会出什么问题?

使用一个套接字创建2个流

我正在尝试创建一个在互联网上运行的多人游戏。 问题是我正在尝试在流上获取输入,并且由于某种原因我无法使用一个套接字创建2个流,我将解释: Socket s=new Socket(“127.0.0.1”,5001); ObjectInputStream obj1=new ObjectInputStream(s.getInputStream()); ObjectInputStream obj2=new ObjectInputStream(s.getInputStream()); 有人可以解释一下为什么这段代码片段不起作用? 编辑:这是代码示例无法正常工作的另一个示例。 while (true) { try { objI = new ObjectInputStream(sock.getInputStream()); objO = new ObjectOutputStream(sock.getOutputStream()); }catch(Exception e) { e.printStackTrace(); } } 编辑2:非常感谢您的回答。 我试图刷新对象,但我不断收到此错误: java.io.StreamCorruptedException: invalid stream header: 33740003 at java.io.ObjectInputStream.readStreamHeader(Unknown Source) at java.io.ObjectInputStream.(Unknown Source) at Proccess.run(Proccess.java:22) at java.lang.Thread.run(Unknown Source)

使用InputStream通过TCP套接字接收多个图像

我每次从相机捕获图像时,我都会尝试从我的Android手机中自动发送多个图像到服务器(PC)。 问题是read()函数只在第一次阻塞。 因此,从技术上讲,只接收并完美显示一个图像。 但之后当is.read()返回-1 ,此函数不会阻塞,并且多个图像无法接收。 代码对于服务器来说很简单 while (true) { InputStream is = null; FileOutputStream fos = null; BufferedOutputStream bos = null; is = sock.getInputStream(); if (is != null) System.out.println(“is not null”); int bufferSize = sock.getReceiveBufferSize(); byte[] bytes = new byte[bufferSize]; while ((count = is.read(bytes)) > 0) { if (filewritecheck == true) { fos = new […]

使用Swing GUI的简单客户端 – 服务器程序

我正在制作一个简单的,无线程的客户端 – 服务器程序,其中GUI在服务器 端和客户端都有一个按钮。 当客户端按下按钮时,它将按钮上的文本更改为“C”并发送到服务器 “C”字符串,因此服务器端的按钮将文本更改为“C” 。 服务器与客户端的工作方式类似,但发送“S”而不是“C” 。 它们轮流工作:当客户轮到它时, 服务器的按钮被锁定,他无法改变他的按钮。 客户总是先开始。 当客户端按下按钮时它工作正常,但是当服务器按下按钮时,它会在服务器端将按钮更改为“S” ,但不会在客户端更改。 我知道我做错了什么。 服务器代码: public class Serv implements ActionListener { private JButton button; private boolean myTurn; private ServerSocket sock; private Socket s; private BufferedReader input; private PrintStream output; public Serv() throws UnknownHostException, IOException { button = new JButton(); myTurn = false; sock = […]

为什么ObjectInputStream readObject()抛出EOFexception

我对这个非常奇怪的问题感到困惑。 在客户端我传递的对象是 try{ oos.writeObject(new GameStartSerializedObject()); oos.flush(); } catch(Exception e){ e.printStackTrace(); } 在服务器中我正在读取对象 try{ //Its my turn thrown_message = player_reader.readObject(); } catch(Exception e){ 我的问题是为什么我得到EOF例外。 我对对象输入流的理解是当我调用readObject()时我应该阻塞直到我得到一个对象,那么它如何知道是否到达了eof? 请帮忙! 这就是我创建对象流的方式 ois = new ObjectInputStream(socket.getInputStream()); oos = new ObjectOutputStream(socket.getOutputStream()); oos.flush(); 此外,在我写对象和刷新后,我应该关闭流。 我没有关闭它,因为对象是从代码的不同部分一个接一个地定期编写的。