Hallo,
ich habe einen Hänger und bräuchte einen Denkanstoß bei folgenden relativ simplen Problem:
Mein Client schickt zum Server einen String und erhält eine Antwort in dem der Server den String mit einem anderen Vergleicht.
Das Senden und Empfangen funktioniert. Was nicht funktioniert ist der Vergleich.
Ich dachte das es simple funktioniert, entweder durch:
if (empfangener String == "Vergleich") ...
oder
if (empfangener String.equals("Vergleich") ....
doch leider ist dem nicht so, oder ich übersehen etwas.
Code vom Server sieht wie folgt aus, entsprechende Stelle beginnt bei Zeile 58 :
Zur Vollständigkeit noch der C-Code vom Client, Übergabestelle ist am Ende:
Danke für Hilfestellungen und Anmerkungen
ich habe einen Hänger und bräuchte einen Denkanstoß bei folgenden relativ simplen Problem:
Mein Client schickt zum Server einen String und erhält eine Antwort in dem der Server den String mit einem anderen Vergleicht.
Das Senden und Empfangen funktioniert. Was nicht funktioniert ist der Vergleich.
Ich dachte das es simple funktioniert, entweder durch:
if (empfangener String == "Vergleich") ...
oder
if (empfangener String.equals("Vergleich") ....
doch leider ist dem nicht so, oder ich übersehen etwas.
Code vom Server sieht wie folgt aus, entsprechende Stelle beginnt bei Zeile 58 :
Java:
package jserver;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.logging.FileHandler;
import java.util.logging.Handler;
import java.util.logging.Logger;
public class JServer implements Runnable {
int backlog = 10;
int port = 1958;
//World world = new World();
Handler handler;
Logger logger;
JServer() {
try {
handler = new FileHandler("logs.xml");
logger = Logger.getGlobal();
logger.addHandler(handler);
} catch (SecurityException | IOException e) {
e.printStackTrace();
}
Thread t = new Thread(this, "Server");
t.start();
}
/**
* @param args
*/
public static void main(String[] args) {
new JServer();
}
@Override
public void run() {
try {
ServerSocket socket = new ServerSocket(port, backlog);
for (;;) {
System.out.println("Waiting for next connection... ");
Socket sockConnected = socket.accept();
System.out.println("Connected with " + sockConnected);
logger.info("Connected with " + sockConnected);
PrintStream ps = new PrintStream(
sockConnected.getOutputStream());
InputStream isr = sockConnected.getInputStream();
String line = getLine(isr);
if (line == "Hallo Welt"){
ps.println("richtig");
}
else
ps.println("flasch");
System.out.println(line);
logger.info(line);
isr.close();
ps.close();
System.out.println("closing socket");
sockConnected.close();
}
} catch (IOException e) {
System.err.println(e);
e.printStackTrace();
}
}
private String getLine(InputStream isr) {
byte[] b = new byte[1];
String sb = "";
try {
while (isr.read(b) >= 0) {
char c = (char) b[0];
sb += (new Character(c)).toString();
if (c == '\n') {
return sb;
}
}
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
private void printStatusPage(PrintStream ps) {
//ps.println(world.status());
}
}
Zur Vollständigkeit noch der C-Code vom Client, Übergabestelle ist am Ende:
Java:
// Client.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung.
//
#include "stdafx.h"
// Need to link with Ws2_32.lib, Mswsock.lib, and Advapi32.lib
#pragma comment (lib, "Ws2_32.lib")
#pragma comment (lib, "Mswsock.lib")
#pragma comment (lib, "AdvApi32.lib")
#define DEFAULT_BUFLEN 512
#define DEFAULT_PORT "1958"
static int verbose = 1;
static char answer[500];
int terminate( char* text ) {
if( verbose ) printf(text);
WSACleanup();
system( "pause" );
return 1;
}
int sendMessage(char *sendbuf ) {
WSADATA wsaData;
SOCKET ConnectSocket = INVALID_SOCKET;
struct addrinfo *result = NULL,
*ptr = NULL,
hints;
int iResult;
int recvbuflen = DEFAULT_BUFLEN;
char recvbuf[DEFAULT_BUFLEN];
// Initialize Winsock
iResult = WSAStartup(MAKEWORD(2,2), &wsaData);
if (iResult != 0) {
printf("WSAStartup failed with error: %d\n", iResult);
return 1;
}
ZeroMemory( &hints, sizeof(hints) );
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
hints.ai_protocol = IPPROTO_TCP;
// Resolve the server address and port
iResult = getaddrinfo("localhost", DEFAULT_PORT, &hints, &result);
if ( iResult != 0 ) {
printf("getaddrinfo failed with error: %d\n", iResult);
WSACleanup();
return 1;
}
// Attempt to connect to an address until one succeeds
for(ptr=result; ptr != NULL ;ptr=ptr->ai_next) {
// Create a SOCKET for connecting to server
ConnectSocket = socket(ptr->ai_family, ptr->ai_socktype,
ptr->ai_protocol);
if (ConnectSocket == INVALID_SOCKET) {
printf("socket failed with error: %ld\n", WSAGetLastError());
WSACleanup();
return 1;
}
// Connect to server.
iResult = connect( ConnectSocket, ptr->ai_addr, (int)ptr->ai_addrlen);
if (iResult == SOCKET_ERROR) {
closesocket(ConnectSocket);
ConnectSocket = INVALID_SOCKET;
continue;
}
if( verbose ) printf("socket connected\n");
break;
}
freeaddrinfo(result);
if (ConnectSocket == INVALID_SOCKET) {
terminate("Unable to connect to server!\n");
}
// Send an initial buffer
iResult = send( ConnectSocket, sendbuf, (int)strlen(sendbuf), 0 );
if (iResult == SOCKET_ERROR) {
printf("send failed with error: %d\n", WSAGetLastError());
closesocket(ConnectSocket);
WSACleanup();
return 1;
}
if( verbose ) printf("Bytes Sent: %ld\n", iResult);
// shutdown the connection since no more data will be sent
iResult = shutdown(ConnectSocket, SD_SEND);
if (iResult == SOCKET_ERROR) {
printf("shutdown failed with error: %d\n", WSAGetLastError());
closesocket(ConnectSocket);
WSACleanup();
return 1;
}
answer[0] = '\0';
// Receive until the peer closes the connection
do {
iResult = recv(ConnectSocket, recvbuf, recvbuflen, 0);
if ( iResult > 0 ) {
recvbuf[iResult] = '\0';
if( verbose ) printf("Bytes received: %d %s\n", iResult, recvbuf);
strcat_s( answer, recvbuf );
//printf(">>>%s<<<\n", answer );
} else if ( iResult == 0 ) {
if( verbose ) printf("Connection closed\n");
} else
printf("recv failed with error: %d\n", WSAGetLastError());
} while( iResult > 0 );
// cleanup
closesocket(ConnectSocket);
WSACleanup();
return 0;
}
int _tmain(int argc, _TCHAR* argv[])
{
printf("starting ... \n");
sendMessage("Hallo Welt\n");
system("pause");
return 0;
}
Danke für Hilfestellungen und Anmerkungen