728x90
Java Network 프로그래밍 기초
( 참고 서적 : 자바 네트워크 프로그래밍 [자바 8과 함께하는 네트워크 애플리케이션 개발] )
IP 주소를 나타내는 InetAddress 클래스
InetAddress 클래스는 public 생성자가 없으므로 여러 static type의 get 메소드 중 하나를 사용한다. (.get~~)
다음은 특정 사이트의 ip주소를 얻는 예제이다.
1 2 3 4 5 6 7 8 9 | import java.net.InetAddress; import java.net.UnknownHostException; public class Address { public static void main(String[] args) throws UnknownHostException { InetAddress address = InetAddress.getByName("www.packtpub.com"); System.out.println(address); } } | cs |
결과 :
www.packtpub.com/83.166.169.231
해당 주소의 접속 여부를 결정하기 위해 필요한 대기시간을 다음과 같이 지정할 수 있다.
isReachable 메소드의 인자는 m/s 단위의 대기 시간이다.
1 | address.isReachable(3000); | cs |
NIO 지원
selector : 다중 채널을 처리하기 위한 싱글 스레드를 허용하는 기술
자바 서버와 안드로이드 클라이언트 연동
Server.java 의 전체 소스
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.net.InetAddress; import java.net.ServerSocket; import java.net.Socket; public class Server { public static void main(String[] args) { ServerStart(); } public static void ServerStart() { try { int portNum = 11001; System.out.println("서버 시작이당"); @SuppressWarnings("resource") ServerSocket serverSocket = new ServerSocket(portNum); System.out.println(portNum); while (true) { Socket socket = serverSocket.accept(); InetAddress clientHost = socket.getInetAddress(); int clientPort = socket.getPort(); System.out.println("클라이언트 접속, 호스트 : " + clientHost + ", port : " + clientPort); ObjectInputStream inputStream = new ObjectInputStream(socket.getInputStream()); Object obj = inputStream.readObject(); System.out.println("Input : " + obj); ObjectOutputStream outputStream = new ObjectOutputStream(socket.getOutputStream()); outputStream.writeObject(obj + " 서버로부터 메시지 "); outputStream.flush(); socket.close(); } } catch(Exception ex) { ex.printStackTrace(); } } } | cs |
안드로이드 클라이언트
인터넷을 사용하기 위해 AndroidManifest.xml에 유저 권한 추가
<uses-permission android:name="android.permission.INTERNET" />
클라이언트 레이아웃 (activity_main.xml 디자인)
MainActivity.java의 전체 소스
package com.example.pknu.hello;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;
public class MainActivity extends AppCompatActivity {
EditText input01;
Button button01;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
input01 = (EditText) findViewById(R.id.input01);
// 버튼 이벤트 처리
button01 = (Button) findViewById(R.id.button01);
button01.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
String addr = input01.getText().toString().trim();
ConnectThread thread = new ConnectThread(addr);
thread.start();
}
});
}
class ConnectThread extends Thread {
String hostname;
public ConnectThread(String addr) {
hostname = addr;
}
public void run() {
try {
int port = 11001;
Socket sock = new Socket(hostname, port);
ObjectOutputStream outstream = new ObjectOutputStream(sock.getOutputStream());
outstream.writeObject("Hello AndroidTown on Android");
outstream.flush();
ObjectInputStream instream = new ObjectInputStream(sock.getInputStream());
String obj = (String) instream.readObject();
Log.d("MainActivity", "서버에서 받은 메시지 : " + obj);
sock.close();
} catch(Exception ex) {
ex.printStackTrace();
}
}
}
}
'Study > Java' 카테고리의 다른 글
자바 - 식별자 (0) | 2021.01.06 |
---|---|
자바 NIO 셀렉터 (0) | 2017.07.05 |
NIO 기반 네트워킹 (0) | 2017.05.30 |
JAVA - NIO (0) | 2017.05.29 |
Java - OOP_인터페이스와 다형성 (0) | 2017.03.20 |