Java网络编程笔记6

在前几遍文章中,我们已经知道了客户端与服务器通信,包括多个客户端与服务器的通信,接下来我们演示下客户端与服务器的完整通信过程。

先看效果图

客户端1

客户端2

服务器端

服务器线程类:

<span style="font-size:18px;">public class Connection extends Thread {
	private JTextArea txt;
	private Socket st;
	private String msg = null;
	private BufferedReader br = null;
	private PrintStream ps;

	public Connection(Socket st, JTextArea txt) {
		this.st = st;
		this.txt = txt;
		start();
	}

	@Override
	public void run() {
		try {
			br = new BufferedReader(new InputStreamReader(new DataInputStream(
					st.getInputStream())));
			ps=new PrintStream(new DataOutputStream(st.getOutputStream()));
			while(true){
				msg=br.readLine();
				txt.append("从客户端收到信息 "+msg+'\n');
				Server.send(msg);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public void send(String msg){
		ps.println(msg);
	}
}
</span>

服务器与客户端进行连接:

<span style="font-size:18px;">public class Server extends JFrame {
	private JTextArea txt;
	private ServerSocket ss;
	private static List<Connection> conns=new ArrayList<Connection>();
	public Server(){
		txt=new JTextArea();
		this.setTitle("服务器");
		this.setLayout(new BorderLayout());
		this.add(new JScrollPane(txt),BorderLayout.CENTER);
		this.setSize(500,300);
		this.setVisible(true);
		run();
	}
	private void run(){
		try {
			ss=new ServerSocket(3000);
			txt.append("接受时间:"+new Date()+"\n");
			while(true){
				Socket st=ss.accept();
				conns.add(new Connection(st, txt));
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	public static void send(String msg){
		for(Connection c:conns){
			c.send(msg);
		}
	}
}</span>

服务器主入口:

<span style="font-size:18px;">public class ServerMain {

	public static void main(String[] args) {
		Server server=new Server();
	}

}</span>

客户端:

<span style="font-size:18px;">public class Client extends JFrame implements ActionListener {
	private JTextArea txta;
	private JTextField txtf;
	private JPanel pl;
	private JButton bt;
	private BufferedReader br;
	private DataOutputStream out;
	private PrintStream ps;
	private Container f = this.getContentPane();

	public Client() {
		f.setLayout(new BorderLayout());
		txta = new JTextArea();
		f.add(txta, BorderLayout.CENTER);
		txtf = new JTextField(20);
		bt = new JButton("发送");
		pl = new JPanel();
		pl.setLayout(new FlowLayout());
		pl.add(txtf);
		pl.add(bt);
		bt.addActionListener(this);
		f.add(pl, BorderLayout.SOUTH);
		setTitle("客户端");
		setSize(500, 300);
		setVisible(true);
		run();
		new Thread() {
			{
				start();
			}

			public void run() {
				while (true) {
					try {
						txta.append("收到消息 :" + br.readLine() + "\n");
					} catch (Exception e) {
						e.printStackTrace();
					}
				}
			}
		};

	}

	public void run() {
		 try {
			 Socket socket=new Socket("192.168.12.112", 3000);
			out=new DataOutputStream(socket.getOutputStream());
			ps=new PrintStream(out);
			br=new BufferedReader(new InputStreamReader(socket.getInputStream()));
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		if(e.getSource()==bt){
			String msg=txtf.getText();
			try {
				ps.println(msg);
				txta.append("已经发送消息:"+msg+"\n");
			} catch (Exception e2) {
				e2.printStackTrace();
			}
		}
	}

}</span>

客户端入口:

<span style="font-size:18px;">public class ClientMain {

	public static void main(String[] args) {
		Client client=new Client();
	}

}</span>

转载请注明出处:http://blog.csdn.net/hai_qing_xu_kong/article/details/42804309  情绪控_

时间: 2025-01-06 14:15:23

Java网络编程笔记6的相关文章

Java网络编程笔记5

在Java网络编程笔记4中我们看到了客户端与服务器通信的过程,只是在前面的程序只是单个客户端与服务器通信 的例子. 接下来我们看如何实现多个客户端与服务器通信,对于服务器来说,它要为每个客户端请求的Socket建立一个线程,并通过它进行通信. 在这里创建一个线程类用来管理Socket: <span style="font-size:18px;">public class ServerThread extends Thread { private Socket socket;

Java网络编程笔记4

Socket和ServerSocket,网络编程可以分为创建Socket.打开连接Socket的输入流和输出流,对Socket进行编程,关闭Socket. 创建Socket 一个功能齐全的Socket的工作过程包含以下四个步骤: 1.创建Socket. 2.打开连接到Socket的输入/输出流. 3.按照一定的协议对Socket进行读/写操作. 4.关闭Socket 在java.net包中,定义了Socket和ServerSocket两个类,类Socket表示客户端或者服务器Socket连接的两

java网络编程笔记

1:网络编程(理解) (1)网络编程:用Java语言实现计算机间数据的信息传递和资源共享 (2)网络编程模型 (3)网络编程的三要素 A:IP地址 a:点分十进制 b:IP地址的组成 c:IP地址的分类 d:dos命令 e:InetAddress B:端口 是应用程序的标识.范围:0-65535.其中0-1024不建议使用. C:协议 UDP:数据打包,有限制,不连接,效率高,不可靠 TCP:建立数据通道,无限制,效率低,可靠 (3)Socket机制 A:通信两端都应该有Socket对象 B:所

Java网络编程笔记1

网络编程的基础知识 什么叫计算机网络,就是把分布在不同地理区域的计算机与专门的外部设备通信线路互连成一个规模大.功能强的网络系统. 计算机网络主要能做些以下功能: 1)资源共享 2)信息传输与集中处理 3)均衡负荷与分布处理 4)综合信息服务 计算机网络按照规模大小和延伸范围来分: 1)局域网(LAN) 2)城域网(MAN) 3)广域网(WAN) 计算机网络按照网络的拓扑结构来划分: 1)星型网络 2)总线型网络 3)环线网络 4)树型网络 5)星型环线网络 ... 计算机网络按照网络的传输介质

Java网络编程笔记2

如果要实现多线程下载,可以定义以下步骤: 1)创建URL对象(URL代表统一资源定位器) URL url=new URL(path);//path资源路径 2)获取URL对象指向资源的大小,使用URLConnection类,该类代表应用程序和URL之间的通信链接. HttpURLConnection conn=(HttpURLConnection) url.openConnection(); conn.setRequestMethod("GET");//以GET方式获取 conn.se

Java网络编程笔记3

如何使用POST请求和GET请求向Web站点发送请求,参考以下代码: import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.net.URL; import java.net.URLConnection; public class GetTest { private String url; private String param; /** *

java网络编程框架

虽然写过一些网络编程方面的东西,但还没有深入研究过这方面的内容,直接摘录一些文章,后续整理 原文地址:http://blog.csdn.net/lwuit/article/details/7306139 自从JDK1.4中有了NIO以后,这个方面越来越活跃,也为java赢得更多开发者的支持.做java网络编程需要掌握一些基本的知识和技能:套接字编程.阻塞/非阻塞通信.创建HTTP服务器与客户程序.数据报通信.对象的序列化与反序列化.Java反射机制.RMI框架.JDBC API.JavaMail

java网络编程socket\server\TCP笔记(转)

java网络编程socket\server\TCP笔记(转) 2012-12-14 08:30:04|  分类: Socket |  标签:java  |举报|字号 订阅 1 TCP的开销 a  连接协商三次握手,c->syn->s,s->syn ack->c, c->ack->s b  关闭协商四次握手,c->fin->s, s->ack-c,s->fin->c,c->ack->s c  保持数据有序,响应确认等计算开销 d

Java学习笔记—第十二章 Java网络编程入门

第十二章  Java网络编程入门 Java提供的三大类网络功能: (1)URL和URLConnection:三大类中最高级的一种,通过URL网络资源表达方式,可以很容易确定网络上数据的位置.利用URL的表示和建立,Java程序可以直接读入网络上所放的数据,或把自己的数据传送到网络的另一端. (2)Socket:又称"套接字",用于描述IP地址和端口(在Internet中,网络中的每台主机都有一个唯一的IP地址,而每台主机又通过提供多个不同端口来提供多种服务).在客户/服务器网络中,当客