现在的位置: 首页 > 综合 > 正文

java学习笔记——Java网络编程三

2014年09月05日 ⁄ 综合 ⁄ 共 3028字 ⁄ 字号 评论关闭

今天小小的弄了一个全双工,加了一个简单的界面,还是能够基本完成相互发送信息的需求的

代码如下:

   服务器端:

//简易全双工
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();
	}

}

效果图:

    

抱歉!评论已关闭.