간단한 socket
/serversocket
예제를 얻으려고합니다. 그러나 클라이언트와 서버 모두 BufferedReader
이 읽으려고 할 때 응답하지 않습니다.Java 클라이언트/서버가 Socket/ServerSocket을 통해 통신하지 않습니다.
서버에
package picturePerfect;
--imports--
public class PictureServer implements Runnable{
static ServerSocket serverSocket;
public static void main(String[] args) throws IOException {
serverSocket = new ServerSocket(2342);
Thread firstSessionThread = new Thread(new PictureServer());
firstSessionThread.start();
}
@Override
public void run() {
Socket socket = null;
try {
socket = serverSocket.accept();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String clientRequest = bufferedReader.readLine();
System.out.println(clientRequest);
PrintWriter printWriter = new PrintWriter(socket.getOutputStream(), true);
printWriter.println("Sent from server!");
} catch (IOException e) {
e.printStackTrace();
}
}
}
CLIENT
package picturePerfect;
--imports--
public class PictureClient {
public static void main(String[] args) throws UnknownHostException, IOException, InterruptedException {
Socket socket = new Socket("localhost", 2342);
PrintWriter printWriter = new PrintWriter(socket.getOutputStream(), true);
printWriter.write("Sent from client!");
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String response = bufferedReader.readLine();
System.out.println(response);
socket.close();
}
}
이 내 코드를 단순화 할 수있는 barest입니다 : 여기에 각각의 코드입니다. 내가 따라 왔던 샘플 프로그램이 거의 동일하게 보인다. 이 샘플 서버와 클라이언트 (가 작업을 수행하는 것이)입니다 :
SAMPLE 서버에
--imports--
public class Server implements Runnable{
static ServerSocket ss;
public static void main(String[] args) throws IOException {
ss = new ServerSocket(3142);
Thread thread = new Thread(new Server());
thread.start();
}
@Override
public void run() {
while (true) {
Socket s = null;
try {
s = ss.accept();
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
String operands = br.readLine();
System.out.println(operands + " was received");
PrintWriter pw = new PrintWriter(s.getOutputStream(), true);
pw.println(operands + " right back!");
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
나는에 while 루프를 넣어 시도했습니다
--imports--
public class Server implements Runnable{
static ServerSocket ss;
public static void main(String[] args) throws IOException {
ss = new ServerSocket(3142);
Thread thread = new Thread(new Server());
thread.start();
}
@Override
public void run() {
while (true) {
Socket s = null;
try {
s = ss.accept();
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
String operands = br.readLine();
System.out.println(operands + " was received");
PrintWriter pw = new PrintWriter(s.getOutputStream(), true);
pw.println(operands + " right back!");
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
샘플 클라이언트 내 서버와 내 클라이언트와 서버를 기본 패키지로 이동했지만 어느 것도 도움이되지 않았습니다. 또한 readLine()
대신 read()
을 사용하고 \r\n
이라는 printWriter의 줄을 끝내려고했지만 그곳에서 실패로 끝났습니다.
특히 샘플 코드가없는 경우 코드가 readLine()
에 멈추는 이유는 무엇입니까?
Windows를 사용하는 경우 http://technet.microsoft.com/en-us/sysinternals/bb897437.aspx에서 TCPView를 확인하여 포트/프로세스에서 보내고받는 패킷을 모니터링하십시오.몇 주 전에 자바로 서버/클라이언트 애플리케이션을 만들었을 때 표시기 오류나 네트워크 오류인지를 확인하는 데 꽤 유용했습니다. – Matthew
오, 멋지다! 나는 그것을 여기에서 필요로하지 않고 끝내었다. 그러나 그것은 내가 할 다음 프로젝트에 유용 할 것이다. 감사! –