I have an issue when running PHP Client sending data to Java Server, the problem is Java server didnt show any input stream from PHP Client.
Java server output only show "Just connected.." when i execute php client, i'm expecting it shows "Testing" , here's java code :
Waiting for client on port 3000...
Waiting for client on port 3000...
Waiting for client on port 3000...
Waiting for client on port 3000...
Just connected to /127.0.0.1:39220
Waiting for client on port 3000...
PHP Client Output :
$ sudo php testSocketClient.php
Try to connect '127.0.0.1' Port '3000'...
Connect OK
Send Message to Server Successfully!
Send Information:Testing
Turn Off Socket...
Turn Off OK
Here's my PHP Client code, this is where i send "Testing" message :
<?php
set_time_limit(0);
$port = 3000;
$ip = "127.0.0.1";
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if($socket < 0) {
echo "socket_create() Fail to create:".socket_strerror($sock)."\n";
} else {
echo "Try to connect '$ip' Port '$port'...\n";
$result = socket_connect($socket, $ip, $port);
if ($result < 0) {
echo "socket_connect() failed.\nReason: ($result) " . socket_strerror($result) . "\n";
}else {
echo "Connect OK\n";
$in = "Testing\r\n";
$out = '';
if(!socket_write($socket, $in, strlen($in))) {
echo "socket_write() failed. reason: " . socket_strerror($socket) . "\n";
}else {
echo "Send Message to Server Successfully!\n";
echo "Send Information:" . $in . "\n";
echo "Turn Off Socket...\n";
socket_close($socket);
echo "Turn Off OK\n";
}
}
}
This is my Java Server Code :
package TestPackage;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketException;
import java.net.SocketTimeoutException;
public class TestSocketListener {
public static void main(String[] args) {
System.out.println("INIT SOCKET");
int port = 3000;
while(true) {
try {
ServerSocket serverSocket = new ServerSocket(port);
serverSocket.setSoTimeout(5000);
System.out.println("Waiting for client on port " +
serverSocket.getLocalPort() + "...");
Socket server = serverSocket.accept();
System.out.println("Just connected to " + server.getRemoteSocketAddress());
DataInputStream DataInStream = new DataInputStream(server.getInputStream());
System.out.println(DataInStream.readUTF());
DataOutputStream DataOutStream = new DataOutputStream(server.getOutputStream());
DataOutStream.writeUTF("Thank you for connecting to " + server.getLocalSocketAddress()
+ "\nGoodbye!");
server.close();
System.out.println(("SERVER CLOSED"));
} catch(SocketTimeoutException st) {
//System.out.println("Socket timed out!");
} catch(SocketException s) {
//System.out.println("Socket Error!!");
//s.getMessage();
} catch (IOException e) {
//System.out.println("IO Error!");
}
}
}
}
This is error message when using exception (same error occured when trying to use different port. i'm trying 3000, 4444, and 29299):
java.net.BindException: Address already in use (Bind failed)
at java.net.PlainSocketImpl.socketBind(Native Method)
at java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:387)
at java.net.ServerSocket.bind(ServerSocket.java:375)
at java.net.ServerSocket.<init>(ServerSocket.java:237)
at java.net.ServerSocket.<init>(ServerSocket.java:128)
at TestPackage.TestSocketListener.main(TestSocketListener.java:17)
Currently port used :
$ nmap 127.0.0.1
Starting Nmap 6.40 ( http://nmap.org ) at 2019-08-01 17:32 WIB
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00046s latency).
Not shown: 994 closed ports
PORT STATE SERVICE
22/tcp open ssh
25/tcp open smtp
80/tcp open http
111/tcp open rpcbind
443/tcp open https
3306/tcp open mysql
TestSocketListenerrunning, or which application is currently using this port.