Java網(wǎng)絡編程基礎篇之單向通信原創(chuàng)

        在網(wǎng)絡編程中如果只要求客戶機向服務器發(fā)送消息,不要求服務器向客戶機發(fā)送消息,稱為單線通信。客戶機套接字和服務器套接字鏈接成功后,可估計通過輸出流發(fā)送數(shù)據(jù),服務器則通過輸入流接受數(shù)據(jù),下面是簡單的單向通信的例子。

從事服務器托管,服務器租用,云主機,網(wǎng)頁空間,國際域名空間,CDN,網(wǎng)絡代維等服務。

        實例1:本實例是一個TCP服務器端程序,在 getserver() 方法中建立服務器套接字,調(diào)用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("服務器套接字已經(jīng)創(chuàng)建成功");
			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();
	}
}

運行結(jié)果:

服務器套接字已經(jīng)創(chuàng)建成功
等待客戶機的連接

        下面我們再來看一下客戶端程序。

        實例2:客戶端程序,實現(xiàn)將用戶在文本框輸入的信息發(fā)送到服務器端,并將文本框中輸入的信息顯示在客戶端的文本域中。代碼如下:

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()+ '\n');
				ta.setSelectionEnd(ta.getText().length());
				tf.setText("");
			}
		});
	}
		private void connect() {
			ta.append("嘗試連接\n");
			try {
				socket = new Socket("127.0.0.1",8998);
				writer = new PrintWriter(socket.getOutputStream(),true);
				ta.append("完成連接\n");
			}catch(Exception e) {
				e.printStackTrace();
			}
		}
		public static void main(String[] args) {
			MyClien clien = new MyClien("向服務器傳送數(shù)據(jù)");
			clien.setSize(200,200);
			clien.setVisible(true);
			clien.connect();
		}
	}

服務器端運行結(jié)果:

服務器套接字已經(jīng)創(chuàng)建成功
等待客戶機的連接
客戶機:革命尚未成功,同志仍需努力!

客戶端運行結(jié)果:

嘗試連接
完成連接
革命尚未成功,同志仍需努力!

說明:

        當一臺機器上安裝了多個網(wǎng)絡應用程序,很可能指定的端口號已被占用。還可能遇到以前運行良好的網(wǎng)絡程序突然運行不了的情況,這種情況很可能也是由于端口被別的程序占用了。此時使用命令 netstat -an 來查看該程序所使用的端口。

        在這里還有很重要的一點,本文所述兩份源碼,一個是服務器端程序,一個是客戶端程序。運行時一定要先運行服務器端程序,然后運行客戶端程序,而且兩段代碼的端口號一定要相同。

        以上就是本文的全部內(nèi)容,真心希望對大家有所幫助。學習是一件任重道遠的事情,那句老話說得好:革命尚未成功,同志仍需努力!

        感謝大家對本站的支持。

名稱欄目:Java網(wǎng)絡編程基礎篇之單向通信原創(chuàng)
文章起源:http://muchs.cn/article24/gpppce.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設計、響應式網(wǎng)站Google、外貿(mào)網(wǎng)站建設、網(wǎng)站營銷網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

小程序開發(fā)