java學習筆記------Java網絡編程三

今天小小的弄了一個全雙工,加了一個簡單的界面,還是能夠基本完成相互發送信息的需求的


代碼如下:

   服務器端:

//簡易全雙工
package ServerTest3;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.net.*;
import java.io.*;

public class MyServer3 extends JFrame{

	//先做一個簡單的界面
	JButton sendButton = new JButton("發送");
	JTextField sendField = new JTextField(10);
	JTextArea showArea = new JTextArea();
	JScrollPane scrollPane = new JScrollPane(showArea);
	JPanel sendPanel = new JPanel();
	PrintWriter pw;
	
	public MyServer3(){
		
		ActionListener sendActionListener = new ActionListener(){

			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				String sendinfo = sendField.getText();
				pw.println(sendinfo);
				sendField.setText("");
			}
		};
		
		sendButton.addActionListener(sendActionListener);
		sendPanel.add(sendField);
		sendPanel.add(sendButton);
		
		//爲了更加像一個顯示窗口    我讓禁止在內容顯示窗口的編輯
		//屏蔽鍵盤事件或許更好些   不過小弟技術有限
		showArea.setEditable(false);
		
		this.add(scrollPane);
		this.add(sendPanel,BorderLayout.SOUTH);
		this.setSize(300, 200);
		this.setTitle("服務器端");
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setVisible(true);
		
		try {
			//監聽本機端口9999
			ServerSocket ss = new ServerSocket(9999);
			Socket s = ss.accept();
			showArea.append("連接成功\n");
			//PrintWriter必須要和Socket在一塊哦  因爲這倆個是聯繫在一起的   不然發不對地方的
			 //不過爲了讓下面的sendActionListener使用 
			 //可以定義成全局變量
			pw = new PrintWriter(s.getOutputStream(),true);
			
			//不斷接收來自客戶端的信息
			InputStreamReader isr = new InputStreamReader(s.getInputStream());
			BufferedReader br = new BufferedReader(isr);
			
			while(true){
				 String getinfo = br.readLine();
				 showArea.append("客戶端發來信息:"+getinfo+"\n");
			 }	 
		
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		MyServer3 ms3 = new MyServer3();
	}

}

客戶端:

  

//簡易全雙工
package ClientTest3;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.net.*;
import java.io.*;

public class MyClient3 extends JFrame{

	//先做一個簡單的界面
	JButton sendButton = new JButton("發送");
	JTextField sendField = new JTextField(10);
	JTextArea showArea = new JTextArea();
	JScrollPane scrollPane = new JScrollPane(showArea);
	JPanel sendPanel = new JPanel();
	PrintWriter pw;
	;
	public MyClient3(){
			
		//定義發送按鈕的事件
		ActionListener sendActionListener = new ActionListener(){

			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				String sendinfo = sendField.getText();
				pw.println(sendinfo);
				sendField.setText("");
			}
		};
		
		sendButton.addActionListener(sendActionListener);
		sendPanel.add(sendField);
		sendPanel.add(sendButton);
		
		//爲了更加像一個顯示窗口    我讓禁止在內容顯示窗口的編輯
		//屏蔽鍵盤事件或許更好些   不過小弟技術有限
		showArea.setEditable(false);
		
		this.add(scrollPane);
		this.add(sendPanel,BorderLayout.SOUTH);
		this.setSize(300, 200);
		this.setTitle("客戶端");
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setVisible(true);
		
		
		//連接本機端口9999
		try {
			Socket s = new Socket("127.0.0.1",9999);
			showArea.append("連接成功\n");
			pw = new PrintWriter(s.getOutputStream(),true);
			//接受來自服務器的信息
			InputStreamReader isr = new InputStreamReader(s.getInputStream());
			BufferedReader br = new BufferedReader(isr);
			
			while(true){
				String getinfo = br.readLine();
				showArea.append("服務器發來信息:"+getinfo+"\n");
			}
		} catch (Exception e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		
		
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		MyClient3 ms3 = new MyClient3();
	}

}


效果圖:

    

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章