Tag: 套接字

套接字通信,Java客户端C服务器

我试图通过套接字与Java客户端和C服务器进行通信如果我在命令行上使用nc来连接或者使用nc作为服务器并与我的Java客户端连接,那么似乎工作正常尝试连接Java客户端和C服务器它不起作用。 客户端启动连接,并发送消息,服务器收到消息,但服务器的响应永远不会到达客户端。 服务器代码: #include #include #include #include #include #include int main( int argc, char *argv[] ) { int sockfd, clisockfd, portno; char * start = “hello”; char * end = “bye”; socklen_t clilen; char buffer[256]; char contentBuffer[255]; struct sockaddr_in serv_addr, cli_addr; int n; //int optval; /* First call to socket() function */ sockfd = socket(AF_INET, […]

如何知道FTP欢迎消息的结束

我的问题是我正在创建一个FTP客户端,到目前为止它的工作完美无缺,除了一个小细节之外,一直困扰着我。 我需要知道FTP欢迎消息跨越了多少行……这是不可接受的! private Socket connection; private PrintWriter outStream; private Scanner inStream; public void InitiateConnection() throws IOException { log.Info(this, “Initiating connection to host: ” + host + “:” + port); connection = new Socket(host, port); log.Info(this, “Connection initiated.”); outStream = new PrintWriter(connection.getOutputStream(), true); inStream = new Scanner(connection.getInputStream()); Listen(); Listen(); Listen(); } public String Listen() throws IOException […]

使用套接字通过TCP从服务器端向客户端发送ArrayList ?

我正在尝试通过TCP将一个对象从服务器端套接字发送到客户端套接字。 我无法找出问题所在。 这是我在客户端遇到的错误: java.io.EOFException at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2280) at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2749) at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:779) at java.io.ObjectInputStream.(ObjectInputStream.java:279) at ClientSide.main(ClientSide.java:16) 服务器端代码: import java.io.*; import java.net.*; import java.util.ArrayList; public class ServerSide { public static void main(String[] args) { try { ServerSocket myServerSocket = new ServerSocket(9999); Socket skt = myServerSocket.accept(); ArrayList my = new ArrayList(); my.set(0,”Bernard”); my.set(1, “Grey”); try { ObjectOutputStream objectOutput = […]

Java:通过Object(In | Out)putStreams阻塞SocketChannel上是否可以进行并发读写?

我在阻塞的SocketChannel上创建了一个ObjectInputSteam和ObjectOutputStream ,并尝试同时读写。 我的代码是这样的: socketChannel = SocketChannel.open(destNode); objectOutputStream = new ObjectOutputStream(Channels.newOutputStream(socketChannel)); objectInputStream = new ObjectInputStream(Channels.newInputStream(socketChannel)); Thread replyThread = new Thread(“SendRunnable-ReplyThread”) { @Override public void run() { try { byte reply = objectInputStream.readByte();//(A) //..process reply } catch (Throwable e) { logger.warn(“Problem reading receive reply.”, e); } } }; replyThread.start(); objectOutputStream.writeObject(someObject);//(B) //..more writing 问题是在行(B)块处写入,直到在行(A)处的读取完成(由SelectableChannel#blockingLock()返回的对象上的块)。 但app逻辑规定在完成所有写操作之前读取不会完成,因此我们有一个有效的死锁。 SocketChannel javadocs表示支持并发读写。 当我尝试使用常规Socket解决方案时,我没有遇到过这样的问题: […]

在Java中检测无法访问的主机的最快方法是什么?

我想在下面的条件下通过以下JUnit测试的最快和最准确的函数boolean isReachable(String host, int port) 。 超时值由JUnit测试本身指定,可能被视为“无法访问”。 请注意:所有答案必须与平台无关。 这意味着InetAddress.isReachable(int timeout)不起作用,因为它依赖端口7在Windows上执行ping操作(ICMP ping是Windows上的未记录的函数),并且此端口在此设置中被阻止。 局域网设置: thisMachine ( 192.168.0.100 ) otherMachine ( 192.168.0.200 ) 没有机器被称为noMachine或具有IP 192.168.0.222 (始终无法访问) 两台机器都在端口8080上运行Apache Tomcat; 所有其他端口都无法访问(包括端口7 ) example.com ( 208.77.188.166 )在端口80上运行Web服务器,只有在LAN连接到Internet时才可以访问 有时,局域网与Internet断开连接,在这种情况下,只能通过IP地址调用本地计算机(所有其他计算机都无法访问;没有DNS)。 所有测试都在thisMachine上运行。 @Test(timeout=1600) // ~320ms per call (should be possible to do better) public void testLocalhost() { // We can always reach ourselves. assertTrue(isReachable(“localhost”, […]

避免使用localhost上的套接字弹出Windows防火墙

我编写了一个简单的Java应用程序,它使用套接字与自身的多个实例进行交互。 第一个实例自动承担服务器的角色,侦听特定端口,并且所有后续实例都连接到它。 我遇到的问题是Windows防火墙弹出询问我是否要取消阻止该程序“接受传入的网络连接”。 问题是: 如果你让应用程序被阻止没关系 ,因为应用程序的实例总是在同一台机器上,所以它总能工作。 我的问题是:我能否以某种方式告知Windows我甚至不希望接受传入的网络连接?

如何通过HTTP代理连接Socket服务器

我有一段代码连接到Socket服务器,它工作正常。 Socket socket = new Socket(); socket.connect(new InetSocketAddress(address, port)); 现在我想通过HTTP代理连接,我该怎么办? 我试过这个并且失败了 SocketAddress proxyAddr = new InetSocketAddress(proxyHost, proxyPort); Proxy proxy = new Proxy(Proxy.Type.SOCKS, addr); Socket socket = new Socket(proxy); socket.connect(new InetSocketAddress(address, port)); 这篇文章建议我应该使用Jakarta Commons HttpClient ,但如何使用它通过HTTP代理连接Socket服务器? 更新:我使用SOCKS代理,如果我使用HTTP代理它不起作用: SocketAddress proxyAddr = new InetSocketAddress(proxyHost, proxyPort); Proxy proxy = new Proxy(Proxy.Type.HTTP, addr); Socket socket = new Socket(proxy); socket.connect(new InetSocketAddress(address, […]

Java客户端python服务器套接字编程

我在java中有一个客户端程序,它向python服务器发送消息“Hello”。 Java代码 import java.io.*; import java.net.*; public class MyClient { public static void main(String[] args) { try{ Socket soc=new Socket(“localhost”,2004); DataOutputStream dout=new DataOutputStream(soc.getOutputStream()); dout.writeUTF(“Hello”); dout.flush(); dout.close(); soc.close(); }catch(Exception e){ e.printStackTrace();} } Python服务器代码 import socket # Import socket module soc = socket.socket() # Create a socket object host = “localhost” # Get local machine name port […]

java和php之间的简单客户端服务器通信

我需要从php客户端发送信息到java服务器,但是没有一个在服务器端接收,尽管在服务器上成功执行了一个print语句,客户端的文本无法在服务器端接收。 以下是代码: Java服务器: import java.io.BufferedReader; import java.net.*; import java.io.*; public class javaphp2 { private static ServerSocket socket; private static Socket connection; private static String command = new String(); private static String responseStr = new String(); private static int port = 4309; public static void main(String args[]) { System.out.println(“Signal Server is running.”); try { socket = […]

Java网络:即兴的Socket / InputStream

我正在Java的套接字上实现一个面向事件的层,我想知道是否有办法确定是否有待读取的数据。 我的常规方法是从套接字读入缓冲区,并在缓冲区填充给定量的字节时调用提供的回调(如果每次到达时都需要触发回调,则可以为0),但是我怀疑Java已经为我做了缓冲。 InputStream的available()方法对此可靠吗? 我应该read()并在Socket上做我自己的缓冲吗? 或者还有另一种方式吗?