Java 네트워크 프로그래밍 기초편의 단방향 통신 오리지널

4345 단어
네트워크 프로그래밍에서 클라이언트만 서버에 메시지를 보내도록 요구하면 서버가 클라이언트에게 메시지를 보내지 않는 것을 단선 통신이라고 한다.클라이언트 플러그인과 서버 플러그인 링크가 성공하면 출력 흐름을 통해 데이터를 전송할 수 있고 서버는 입력 흐름을 통해 데이터를 받아들일 수 있다. 다음은 간단한 단방향 통신의 예이다.
실례 1: 이 실례는 TCP 서버 사이드 프로그램으로 getserver () 방법에서 서버 플러그인을 만들고 getClienMessage () 방법을 호출하여 클라이언트 정보를 얻습니다.코드는 다음과 같습니다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;

public class MyTcp {
	private BufferedReader reader;
	private ServerSocket server;
	private Socket socket;
	void getserver() {
		try {
			server = new ServerSocket(8998);
			System.out.println(" ");
			while(true) {
				System.out.println(" ");
				socket = server.accept();
				reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
				getClienMessage();
			}
		}catch(Exception e) {
			e.printStackTrace();
		}
		
	}
	private void getClienMessage() {
		try {
			while (true) {
				System.out.println(" :"+ reader.readLine());
			}
		}catch(Exception e) {
			e.printStackTrace();
		}
		try {
			if(reader !=null) {
				reader.close();
			}
			if(socket !=null) {
				socket.close();
			}
		}catch(IOException e) {
			e.printStackTrace();
		}
	}
	public static void main(String[] args) {
		MyTcp tcp = new MyTcp();
		tcp.getserver();
	}
}

실행 결과:
서버 소켓이 클라이언트의 연결을 기다리는 데 성공했습니다
다음은 클라이언트 프로그램을 다시 한 번 보겠습니다.
실례2: 클라이언트 프로그램은 사용자가 텍스트 상자에 입력한 정보를 서버에 보내고 텍스트 상자에 입력한 정보를 클라이언트의 텍스트 필드에 표시합니다.코드는 다음과 같습니다.

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.PrintWriter;
import java.net.Socket;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.border.BevelBorder;

public class MyClien extends JFrame{
	private PrintWriter writer;
	Socket socket;
	private JTextArea ta = new JTextArea();
	private JTextField tf = new JTextField();
	Container cc;
	public MyClien(String title) {
		super(title);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		cc = this.getContentPane();
		final JScrollPane scrollPane = new JScrollPane();
		scrollPane.setBorder(new BevelBorder(BevelBorder.RAISED));
		getContentPane().add(scrollPane, BorderLayout.CENTER);
		scrollPane.setViewportView(ta);
		cc.add(tf,"South");
		tf.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				writer.println(tf.getText());
				ta.append(tf.getText()+ '
'); ta.setSelectionEnd(ta.getText().length()); tf.setText(""); } }); } private void connect() { ta.append("
"); try { socket = new Socket("127.0.0.1",8998); writer = new PrintWriter(socket.getOutputStream(),true); ta.append("
"); }catch(Exception e) { e.printStackTrace(); } } public static void main(String[] args) { MyClien clien = new MyClien(" "); clien.setSize(200,200); clien.setVisible(true); clien.connect(); } }

서버 측 실행 결과:
서버 플러그인은 클라이언트를 기다리는 연결 클라이언트를 만들었습니다. 혁명은 아직 성공하지 못했습니다. 동지는 여전히 노력해야 합니다!
클라이언트 실행 결과:
연결 혁명을 완성하는 데 성공하지 못했습니다. 동지는 여전히 노력해야 합니다!
설명:
한 기계에 여러 개의 네트워크 응용 프로그램이 설치되어 있으면 지정한 포트 번호가 이미 점용되었을 가능성이 높다.이전에 잘 실행되었던 네트워크 프로그램이 갑자기 실행되지 않는 상황을 만날 수도 있다. 이런 상황도 포트가 다른 프로그램에 의해 점용되었기 때문일 가능성이 높다.이 프로그램에서 사용하는 포트를 보려면 netstat-an 명령을 사용하십시오.
여기서 중요한 점은 본고에서 기술한 두 개의 원본 코드인데 하나는 서버 사이드 프로그램이고 하나는 클라이언트 프로그램이다.실행할 때 반드시 서버 사이드 프로그램을 실행한 다음에 클라이언트 프로그램을 실행해야 하며, 두 단락 코드의 포트 번호는 반드시 같아야 한다.
이상은 본문의 전체 내용입니다. 여러분께 도움이 되기를 진심으로 바랍니다.공부는 임무가 무겁고 갈 길이 먼 일이다. 그 옛말은 잘했다. 혁명은 아직 성공하지 못했으니 동지는 여전히 노력해야 한다!
여러분의 본 사이트에 대한 지지에 감사 드립니다.

좋은 웹페이지 즐겨찾기