Socket 네트워크 프로 토 콜 중 하나
다음은 먼저 Socketserver 의 종 류 를 서버 로 만 들 것 입 니 다.이 서버 는 다 중 스 레 드 체 제 를 실현 하고 특정한 포트 에서 여러 개의 고객 의 요 구 를 감청 할 수 있 습 니 다.고객 의 요구 가 있 으 면 Server 는 새로운 고객 에 게 서 비 스 를 제공 하 는 순종 서 비 스 를 만 들 고 자신 이 계속 감청 할 수 있 습 니 다.프로그램 에서 accept()는 차단 함수 입 니 다.차단 성 방법 이란 이 방법 이 호출 되면 고객 의 요청 을 기다 리 고 한 고객 이 시작 하고 같은 포트 에 연결 을 요청 할 때 까지 accept()는 고객 에 대응 하 는 Socket 을 되 돌려 줍 니 다.이때 고객 측 과 서비스 측은 모두 통신 에 사용 되 는 Socket 을 만 들 었 고 그 다음은 각 Socket 에서 각자 의 입력,출력 흐름 을 각각 열 었 다.
SocketServer 클래스,서버 구현:
package server;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class SocketServer {
ServerSocket sever;
public SocketServer(int port){
try{
sever = new ServerSocket(port);
}catch(IOException e){
e.printStackTrace();
}
}
public void beginListen(){
while(true){
try{
final Socket socket = sever.accept();
new Thread(new Runnable(){
public void run(){
BufferedReader in;
try{
in = new BufferedReader(new InputStreamReader(socket.getInputStream(),"UTF-8"));
PrintWriter out = new PrintWriter(socket.getOutputStream());
while (!socket.isClosed()){
String str;
str = in.readLine();
out.println("Hello!world!! " + str);
out.flush();
if (str == null || str.equals("end"))
break;
System.out.println(str);
}
socket.close();
}catch(IOException e){
e.printStackTrace();
}
}
}).start();
}catch(IOException e){
e.printStackTrace();
}
}
}
}
SocketClient 클래스,클 라 이언 트 구현:
package client;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
public class SocketClient {
static Socket client;
public SocketClient(String site, int port){
try{
client = new Socket(site,port);
System.out.println("Client is created! site:"+site+" port:"+port);
}catch (UnknownHostException e){
e.printStackTrace();
}catch (IOException e){
e.printStackTrace();
}
}
public String sendMsg(String msg){
try{
BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
PrintWriter out = new PrintWriter(client.getOutputStream());
out.println(msg);
out.flush();
return in.readLine();
}catch(IOException e){
e.printStackTrace();
}
return "";
}
public void closeSocket(){
try{
client.close();
}catch(IOException e){
e.printStackTrace();
}
}
public static void main(String[] args) throws Exception{
}
}
다음은 Socket 통신 테스트 하 러 왔 습 니 다!
먼저 TestServer 클래스 를 실행 하고 서버 를 열 어 12345 포트 에서 감청 합 니 다!
package server;
public class TestServer {
/**
* @param args
*/
public static void main(String[] argvs){
SocketServer server = new SocketServer(1234);
server.beginListen();
}
}
TestClient 클래스 를 다시 실행 합 니 다:
package client;
public class TestClient {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
SocketClient client = new SocketClient("127.0.0.1",1234);
System.out.println(client.sendMsg("nimei1"));
client.closeSocket();
SocketClient client1 = new SocketClient("127.0.0.1",1234);
System.out.println(client1.sendMsg("nimei1111"));
client1.closeSocket();
SocketClient client11 = new SocketClient("127.0.0.1",1234);
System.out.println(client11.sendMsg("nimei11111111"));
client11.closeSocket();
SocketClient client111 = new SocketClient("127.0.0.1",1234);
System.out.println(client111.sendMsg("nimei11111111111111111"));
client111.closeSocket();
}
}
출력 결 과 는 다음 과 같 습 니 다.
서버:
nimei1
nimei1111
nimei11111111
nimei11111111111111111
클 라 이언 트:
Client is created! site:127.0.0.1 port:1234
Hello!world!! nimei1
Client is created! site:127.0.0.1 port:1234
Hello!world!! nimei1111
Client is created! site:127.0.0.1 port:1234
Hello!world!! nimei11111111
Client is created! site:127.0.0.1 port:1234
Hello!world!! nimei11111111111111111
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.