네트워크 프로그래밍 학습 ----(2) UDP 모드에서 데이터의 전송과 수용을 실현하다
1 IP 주소: Java 클래스의 InetAddress 객체
InetAddress에 대한 간단한 작업
public static void UDPPartern_IP(){
try {
InetAddress ip = InetAddress.getLocalHost();// IP
System.out.println(ip.getAddress());
System.out.println(ip.getHostAddress());//IP
System.out.println(ip.getHostName());//
} catch (UnknownHostException e) {
e.printStackTrace();
}
}
2 TCP 및 UDP
2.1 UDP
1 데이터 및 소스 및 목적을 패킷으로 캡슐화할 필요가 없음 2 패킷의 크기를 64K 이내로 제한할 필요가 없음 3연결이 필요 없음 신뢰할 수 없음 프로토콜 4연결이 필요 없음 빠른 속도
2.1 TCP
1 연결을 구축하여 데이터를 전송하는 통로를 형성한다.2 연결 중 빅데이터 양 전송.3 세 번의 핸드셰이크를 통해 연결이 완료되므로 신뢰할 수 있는 프로토콜4 연결이 필요하며 효율성이 약간 떨어집니다.
3 Socket
Socket은 인터넷 서비스를 위한 일종의 서비스 메커니즘으로 통신 양쪽에 모두 Socket이 있다.네트워크 통신은 사실 Socket 간의 통신 데이터가 두 Socket 간에 IO를 통해 전송되는 것이다
4 UDP 모드에서 데이터 전송 및 수용
코드는 다음과 같습니다. 송신자가 데이터를 보냅니다.
public static void UDPPartern_send(){
try {
//1 UDP . DatagramSocket
DatagramSocket ds = new DatagramSocket();
//2 ,
byte[] buf = "udp ge men lai le".getBytes();
// 1234
DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName(InetAddress.getLocalHost().getHostAddress()),1234);
//3
ds.send(dp);
//4
ds.close();
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
수용자 수용 데이터:
public static void UDPPartern_receive(){
try {
//1 UDP . DatagramSocket
DatagramSocket ds = new DatagramSocket(1234);
//2 ,
byte[] buf = new byte[1024];
DatagramPacket dp = new DatagramPacket(buf,buf.length);
//3
ds.receive(dp);
System.out.println("addressName"+dp.getAddress().getHostAddress());
String data = new String(dp.getData(),0,dp.getLength());
System.out.println("data"+data);
//4
ds.close();
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
5 멀티스레드와 채팅 기능 결합
계속 확장하면 발송과 수신을 각각 하나의 라인으로 하고 두 개의 라인을 켜면 하나는 키보드를 읽고 데이터를 입력하여 발송하고 다른 하나는 발송 데이터를 받아들이는 것을 책임진다.코드는 다음과 같습니다. 송신자:
public class Socket_send implements Runnable{
private DatagramSocket ds;
public Socket_send(DatagramSocket ds){
this.ds = ds;
}
@Override
public void run() {
try {
//2 ,
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
String line = null;
while((line = bf.readLine())!=null){
if("886".equals(line)){
break;
}
byte[] buf = line.getBytes();
DatagramPacket dp = new DatagramPacket(buf, buf.length,InetAddress.getByName(InetAddress.getLocalHost().getHostAddress()),12002);
ds.send(dp);
// 。 Socket ( ), ,
}
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
수신자:
public class Socket_receive implements Runnable{
private DatagramSocket ds;
public Socket_receive(DatagramSocket ds){
this.ds = ds;
}
@Override
public void run() {
while(true){
try {
//2 ,
byte[] buf = new byte[1024];
DatagramPacket dp = new DatagramPacket(buf,buf.length);
//3
ds.receive(dp);
System.out.println("addressName: "+dp.getAddress().getHostAddress());
String data = new String(dp.getData(),0,dp.getLength());
System.out.println("data: "+data);
// 。 Socket ( ), ,
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
위 프로그램은 어떤 IP 주소 아래의 어떤 포트를 감청함으로써 정보의 발송과 수신을 실현한다. 채팅 기능의 기초는 바로 이것에 기초한 것이다!또한 자신이 배운 지식을 적시에 활용하는 것이 중요하다!
END
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.