简体   繁体   中英

Socket Connection Over WiFi using Java and Dynamic C

Okay so I have had a few small problems while sending data over WiFi. I have a Rabbit RCM5400W WiFi board and I need to send data to it. I have created a few client/server socket examples in Java that have run over localhost port 5000 and have been able to send and receive data. I am now trying to create a program that runs over WiFi that will echo back any information the client (Java) sends the server (Dynamic C). So far all of my connections have either timed out or thrown a "java.net.ConnectException: Connection refused". Any help to connect these 2 would be appreciated.

Dynamic C Server

     #class auto

     #define TCPCONFIG             1
     #define _PRIMARY_STATIC_IP    "10.10.6.100"
     #define _PRIMARY_NETMASK      "255.255.255.0"
     #define MY_GATEWAY            "10.10.6.1"
     #define MY_NAMESERVER         "10.10.6.1"
     #define IFC_WIFI_SSID         "rabbitTest"
     #define IFC_WIFI_ROAM_ENABLE  1
     #define IFC_WIFI_ROAM_BEACON_MISS  20
     #define IFC_WIFI_CHANNEL      1
     #define IFC_WIFI_MODE         IFPARAM_WIFI_ADHOC
     #define IFC_WIFI_REGION       IFPARAM_WIFI_REGION_AMERICAS
     #define IFC_WIFI_ENCRYPTION   IFPARAM_WIFI_ENCR_NONE

#use "dcrtcp.lib"


#define PORT 5000


void main()
{
int bytes_read;
/*
    Unless STDIO_ENABLE_LONG_STRINGS is defined, printf() has max 127 bytes
    it can output.  For this sample, we'll read in a maximum of 100 bytes
    at a time.
*/
char    buffer[100];
tcp_Socket socket;

// Start network and wait for interface to come up (or error exit).
sock_init_or_exit(1);

while(1) {
    tcp_listen(&socket,PORT,0,0,NULL,0);

    printf("Waiting for connection...\n");
    while(!sock_established(&socket) && sock_bytesready(&socket)==-1)
        tcp_tick(NULL);

    printf("Connection received...\n");

    do {
        bytes_read=sock_fastread(&socket,buffer,sizeof(buffer)-1);

        if(bytes_read>0) {
            buffer[bytes_read]=0;
            printf("%s",buffer);
            sock_write(&socket,buffer,bytes_read);
        }
    } while(tcp_tick(&socket));

    printf("Connection closed...\n");
 }
} 

Java Client

import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
import java.util.Scanner;

public class Client implements Runnable {
// The socket connecting us to the server

private Socket socket;
// The streams we communicate to the server; these come
// from the socket
private DataOutputStream dout;
private DataInputStream din;

// Constructor
public Client(String host, int port) {

// Connect to the server
    try {
// Initiate the connection
            socket = new Socket(host, port);
// We got a connection! Tell the world
            System.out.println("connected to " + socket);
// Let's grab the streams and create DataInput/Output streams
// from them
            din = new DataInputStream(socket.getInputStream());
            dout = new DataOutputStream(socket.getOutputStream());
// Start a background thread for receiving messages
        new Thread(this).start();
    } catch (IOException ie) {
        System.out.println(ie);
    }
    //create a variable to hold how many times we send a message
    int counter = 1;

    //continuously accept user messages from console
    while (true) {
        Scanner kb = new Scanner(System.in);
        //we only want to display this message on startup 
        if (counter == 1) {
            System.out.println("Send:");
        }
        processMessage(kb.nextLine());
        counter++;
    }
}

// Gets called when the user types something
private void processMessage(String message) {
    try {
// Send it to the server
        dout.writeUTF(message);     
    } catch (IOException ie) {
        System.out.println(ie);
    }
}
// Background thread runs this: show messages from other window

@Override
public void run() {
    try {
        // Receive messages one-by-one, forever
        while (true) {
           // Get the next message
            String message = din.readUTF();
           // Print it to our text window
            System.out.println("Recieved: " + message);
           //add a new line for user input
            System.out.println("Send:");
        }
    } catch (IOException ie) {
        System.out.println(ie);
    }
   }
 }

Java RunClient Program

public class ClientRun {

public static void main(String[] args) {
    //we will run the client on port 5000, the same as the server
    int port = 5000;
    //create a new client on WiFi Router port 5000
    new Client("10.10.6.100",port);
 }
}

If you get a "connect timeout" that probably means that client-side wasn't able to get any network packets to the server. If you get a "connection refused" that means the client-side was able to get a packet through, but what ever it got to didn't have anything listening for new connections.

In either case, the problem most likely NOT in the Java code, but in your networking setup; eg in the way you have configured the WiFi network, the network interfaces, routing and/or firewalls and packet filters ... at both ends.

You should probably start with something simple:

  • Can you "ping" the server from the command line on the client?

  • Can you establish a TCP/IP network connection from the command line; eg using telnet or nc to connect to the server port?

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM