Мое назначение требует от меня написать сервер в c, а клиент в java. Мне нужно отправить целое число моему клиенту в качестве инструкций. Они могут подключаться гладко, но мой клиент java не может получить целочисленную отправку с сервера c. есть только две возможности: мой c сервер не отправил номер или мой клиент не получил целое число правильно. c сервер способен l oop при наборе, поскольку printf и scanf выполняются, а на стороне клиента ничего не происходит.
Я застрял здесь, любая помощь будет признательна!
=================================================== =========================== ОБНОВЛЕНИЕ: я исправляю основной класс в java, где имя класса клиента в dotClient, и мой Клиент смог подключиться и прочитать входные данные с сервера. Я пытаюсь отправить 'int' непосредственно на стороне сервера, но когда клиент (java) использует DataInputStream.ReadInt (), он возвращает случайное большое число, как если бы размер int в c и размер int в java не совпадает. Когда я использую c клиент для той же работы, он работает нормально. Так что есть скрытая проблема для использования dataInputStream напрямую с сервером c, так как я также пробовал readShort () и ReadLong ().
Как и предполагалось, я использую bufferReader. И отправьте строку на стороне сервера, и просмотрите ее в int в клиенте. это работает.
вот мой обновленный c код
#define PORT 55555
int main(int argc, char const *argv[])
{
int server_fd, new_socket, valread;
struct sockaddr_in address;
int opt = 1;
int addrlen = sizeof(address);
char buffer[1024];
int returnSend = 0;
// Creating socket file descriptor
if (
(server_fd = socket(AF_INET, SOCK_STREAM, 0))
== 0)
{
perror("socket failed");
exit(EXIT_FAILURE);
}
printf("%s\n", "Socket created!");
// Forcefully attaching socket to the port 8080
if (setsockopt(server_fd, SOL_SOCKET,
SO_REUSEPORT, &opt, sizeof(opt)))
{
perror("setsockopt");
exit(EXIT_FAILURE);
}
printf("Socket attached!\n");
address.sin_family = AF_INET;
address.sin_addr.s_addr = INADDR_ANY;
address.sin_port = htons( PORT );
// Forcefully attaching socket to the port 8080
if (bind(server_fd,
(struct sockaddr *)&address,
sizeof(address))<0)
{
perror("bind failed");
exit(EXIT_FAILURE);
}
printf("socket binded!\n");
if (listen(server_fd, 3) < 0)
{
perror("listen");
exit(EXIT_FAILURE);
}
printf("socket listened!\n");
if ((new_socket = accept(server_fd,
(struct sockaddr *)&address,
(socklen_t*)&addrlen))<0)
{
perror("accept");
exit(EXIT_FAILURE);
}// Socket formulated !
do{
fgets(buffer, sizeof(buffer), stdin);
returnSend = write(new_socket , buffer , strlen(buffer));
printf("Sending: %sReturn returnSend: %d.\n", buffer,returnSend);
} while (1);
return 0;
}
вот мой обновленный java клиент
import java.net.*;
import java.io.*;
public class dotClient
{
// initialize socket and input output streams
private Socket echoSocket= null;
private BufferedReader input = null;
// constructor to put ip address and port
public dotClient(String address, int port)
{
// establish a connection
try
{
echoSocket = new Socket(address, port);
System.out.println("Connected");
input =
new BufferedReader(
new InputStreamReader(echoSocket.getInputStream()));
}
catch(UnknownHostException u)
{
System.out.println("exception 1: "+u);
}
catch(IOException i)
{
System.out.println("exception 2: "+i);
}
int number = 0;
String line = "";
// keep reading until read neagaive integer
try
{
while ((line = input.readLine()) != null)
{
number = Integer.parseInt(line);
System.out.println("String is :"+line);
System.out.println("number is :"+number);
}
}
catch(IOException i)
{
System.out.println("Exception 3: "+i);
}
// close the connection
try
{
input.close();
out.close();
echoSocket.close();
System.out.println("Connection closed!");
}
catch(IOException i)
{
System.out.println("Exception 4: "+i);
}
}
public static void main(String args[])
{
dotClient client = new dotClient("192.168.0.3", 55555);
}
}