자바 네트워크 프로 그래 밍 의 socket 네트워크 프로 그래 밍 예제(서버 엔 드/클 라 이언 트)

자바 는 TCP 프로 토 콜 에 클 라 이언 트 프로 그래 밍 과 서버 프로 그래 밍 에서 두 가지 종 류 를 제공 합 니 다.응용 프로그램 이 통신 을 시작 하기 전에 먼저 연결 을 만 들 고 클 라 이언 트 프로그램 에서 시작 해 야 합 니 다.서버 쪽 프로그램 은 호스트 의 특정 포트 번 호 를 계속 감청 하고 클 라 이언 트 의 연결 을 기 다 려 야 합 니 다.클 라 이언 트 에서 우 리 는 Socket 인 스 턴 스 만 사용 하고 서버 는 ServerSocket 인 스 턴 스 와 Socket 인 스 턴 스 를 동시에 처리 해 야 합 니 다.두 사람 은 모두 OutputStream 과 InpuStream 을 사용 하여 데 이 터 를 보 내 고 받 습 니 다.
지식 을 배 우 는 가장 좋 은 방법 은 바로 그것 을 사용 하 는 것 이다.앞의 필 기 를 통 해 우 리 는 호스트 의 주소 정 보 를 어떻게 얻 는 지 이미 알 고 있다.지금 우 리 는 간단 한 프로그램 을 통 해 전송 층 이 TCP 프로 토 콜 을 사용 하 는 Socket 프로 그래 밍 을 초보 적 으로 학습 하고 있다.
TCP 서버 쪽
Socket 프로 그래 밍 에서 서버 쪽 은 클 라 이언 트 보다 훨씬 복잡 합 니 다.서버 측의 작업 은 통신 단말 기 를 만들어 클 라 이언 트 의 연결 을 수 동적 으로 기다 리 는 것 이다.다음 서버 엔 드 프로그램의 예제 역할 은 콘 솔 에서 가 져 온 포트 번 호 를 감청 하고 클 라 이언 트 가 보 낸 메 시 지 를 다시 보 내 는 것 입 니 다.

importjava.net.*;
importjava.text.MessageFormat;
importjava.io.*;

publicclassTCPEchoServer{

privatestaticfinalintBUFSIZE=32;

publicstaticvoidmain(String[]args)throwsIOException{
//TODOAuto-generatedmethodstub
    //
if(args.length!=1)
thrownewIllegalArgumentException("Parameter(s):<Port>");
//
intservPort=Integer.parseInt(args[0]);
// ServerSocket
ServerSocketservSocket=newServerSocket(servPort);
System.out.println(MessageFormat.format(" , :{0}",args[0]));

//
intrecvMsgSize;
//
byte[]receiveBuf=newbyte[BUFSIZE];

// , ,
while(true){
// ,
SocketclntSocket=servSocket.accept();
// SocketAddress
SocketAddressclientAddress=clntSocket.getRemoteSocketAddress();
//
System.out.println("Handlingclientat"+clientAddress);
//
InputStreamin=clntSocket.getInputStream();
//
OutputStreamout=clntSocket.getOutputStream();
// ,
while((recvMsgSize=in.read(receiveBuf))!=-1){
out.write(receiveBuf,0,recvMsgSize);
}
// ,
System.out.println(" ");
clntSocket.close();
}
}
}

TCP 클 라 이언 트 는 Socket 프로 그래 밍 에서 먼저 클 라 이언 트 가 서버 측 에 보 낸 다음 에 서버 측의 응답 을 수 동적 으로 기 다 려 야 합 니 다.다음 예제 에 서 는 서버 측 에 메 시 지 를 보 내 고 서버 측 에서 보 내 는 메 시 지 를 기다 리 며 인쇄 하여 표시 합 니 다. 

importjava.io.*;
importjava.net.Socket;
importjava.net.SocketException;

publicclassTCPEchoClient{
publicstaticvoidmain(String[]args)throwsIOException{
//TODOAuto-generatedmethodstub
    //
if((args.length<2)||(args.length>3))
thrownewIllegalArgumentException(
"Parameter(s):<Server><Word>[<Port>]]");
//
Stringserver=args[0];
//
byte[]data=args[1].getBytes();
// , 8099
intservPort=(args.length==3)?Integer.parseInt(args[2]):8099;
// Socket
Socketsocket=newSocket(server,servPort);
System.out.println("Connectedtoserver...sendingechostring");
// ,
InputStreamin=socket.getInputStream();
// ,
OutputStreamout=socket.getOutputStream();
//
out.write(data);
// ,
inttotalBytesRcvd=0;
//
intbytesRcvd;
while(totalBytesRcvd<data.length){
// , -1,read
if((bytesRcvd=in.read(data,totalBytesRcvd,data.length
-totalBytesRcvd))==-1)
thrownewSocketException(" ");
totalBytesRcvd+=bytesRcvd;
}
//
System.out.println("Received:"+newString(data));
//
socket.close();
}
}

먼저 서버 단 을 실행 하고 8099 포트 를 감청 합 니 다
이 어 클 라 이언 트 프로그램 을 실행 하고 서버 측 에 메 시 지 를 보 냅 니 다
우리 의 서버 엔 드 콘 솔 을 다시 보면 앞의 클 라 이언 트 연결 주소 정 보 를 볼 수 있 습 니 다

좋은 웹페이지 즐겨찾기