网络编程-局域网通信
来源:互联网 发布:数据分析师是什么专业 编辑:程序博客网 时间:2024/04/30 05:05
网络编程的定义
使用代码来完成,两个或者多个应用程序,之间的通过某种协议进行数据传递,这就是网络编程。
4、开发一个服务端和一个客户端的程序,让后让客户端来链接服务端,并且进行数据传输。
5、基于Socket 完成一个网络编程实例.
a、创建服务端(ServerSocket(创建端口)), 创建一个客户端(Socket,必须指明要链接服务端ip,和port(端口))
b、服务端要给客户端发送一个信息,客户端要接受服务端发送过来的信息,
客户端还要给服务端发送信息,服务端也得接受客户端发送的信息。
c、能不能就这样不断发送信息?
d、服务能不能给多个客户端发送信息?能不能监听到多个客户端?
6、服务负责接受任何一个客户端发送来信息,并且把发送来的信息分发给每个客户端。
7、作业:指定给谁发信息。
gh.li@hyserver.com
使用代码来完成,两个或者多个应用程序,之间的通过某种协议进行数据传递,这就是网络编程。
4、开发一个服务端和一个客户端的程序,让后让客户端来链接服务端,并且进行数据传输。
5、基于Socket 完成一个网络编程实例.
a、创建服务端(ServerSocket(创建端口)), 创建一个客户端(Socket,必须指明要链接服务端ip,和port(端口))
b、服务端要给客户端发送一个信息,客户端要接受服务端发送过来的信息,
客户端还要给服务端发送信息,服务端也得接受客户端发送的信息。
c、能不能就这样不断发送信息?
d、服务能不能给多个客户端发送信息?能不能监听到多个客户端?
6、服务负责接受任何一个客户端发送来信息,并且把发送来的信息分发给每个客户端。
7、作业:指定给谁发信息。
gh.li@hyserver.com
客户端代码
package com.salmon.test;import java.awt.BorderLayout;import java.awt.Frame;import java.awt.TextArea;import java.awt.TextField;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.IOException;import java.net.Socket;import java.net.UnknownHostException;import java.text.SimpleDateFormat;import java.util.Date;public class TestClient extends Frame{// 客户端链接对象Socket s = null;// 创建输出流 负责窗口给 服务端发送信息DataOutputStream dos;// 声明单行的文本框 组件TextField tf;// 多行文本框组件TextArea ta;public void init(){// 设置位置 this.setLocation(0, 0);// 设置大小this.setSize(400,300);// 设置当前窗口的大小//this.setBounds(0, 0, 400, 300);// 创建组件tf = new TextField();ta = new TextArea();// 把创建好的组件 放在我们当前窗口中 this.add(ta,BorderLayout.NORTH); this.add(tf,BorderLayout.SOUTH);// 给窗口添加一个关闭的时间this.addWindowListener(new WindowAdapter() {// 这个就会在你 点击窗口 那个红色叉号 就会调用这个方法 就去把当前的程序结束@Overridepublic void windowClosing(WindowEvent arg0) {// 退出程序System.exit(0);}});// 给单行文本框添加回车触发事件tf.addActionListener(new ActionListener() {/** * 在你按 回车的时候 就调用这个方法 */@Overridepublic void actionPerformed(ActionEvent arg0) {// 获得单行输入框中值 String msg = tf.getText();Date today = new Date();SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");String time = sdf.format(today);msg = time+":\n"+msg;// 先把信息发送给服务端try {dos.writeUTF(msg);dos.flush();} catch (IOException e) {e.printStackTrace();}/*// 把放在 多行文本框中if("".equals(ta.getText())){ta.setText(msg);}else{ta.setText(ta.getText()+"\n"+msg);}*/tf.setText("");}});// 调用创建链接 方法this.createConn();// 启动一个线程负责 接收服务端发送过来信息ServerThread st = new ServerThread(s,ta);st.start();// 窗口随着内容大小而呈现(自适应) this.pack();/*// 让窗口中组件重新布局this.validate();// 让窗口显示this.show();*/ // 显示窗口 this.setVisible(true);}/** * 创建和服务器的链接 */public void createConn(){try { s = new Socket("localhost",8000); // 获得一个 输出流对象 dos =new DataOutputStream(s.getOutputStream());} catch (UnknownHostException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();}}public static void main(String args[]){new TestClient().init();}}// 一个文件 两个类class ServerThread extends Thread{Socket s;DataInputStream dis;TextArea ta;public ServerThread(Socket s,TextArea ta){this.ta = ta;this.s = s;try {dis = new DataInputStream(s.getInputStream());} catch (IOException e) {e.printStackTrace();}}public void run(){try {while (true) {String msg = dis.readUTF();if("".equals(ta.getText())){ta.setText(msg);}else{ta.setText(ta.getText()+"\n"+msg);}}} catch (IOException e) {e.printStackTrace();}}}
服务端代码
package com.salmon.test;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.IOException;import java.net.ServerSocket;import java.net.Socket;import java.util.ArrayList;import java.util.List;public class TestServer {boolean flag = true;List list = new ArrayList();public void init(){try {// 创建服务端对象ServerSocket ss = new ServerSocket(8000);//1-1023 系统中就已经占用了while(flag){// 启动服务的监听 去监听有没有客户端 链接Socket s = ss.accept();System.out.println("成功监听到一个客户端的链接.....");// 就创建一个 线程对象 来封装这个客户端对象ClientThread ct = new ClientThread(s,list);ct.setName(s.getPort()+"");// 装到一个容器中list.add(ct);// 启动线程ct.start();}} catch (IOException e) {e.printStackTrace();}}public static void main(String[] args) {new TestServer().init();}}// 一个源文件 两个类class ClientThread extends Thread{List list;Socket s;DataInputStream dis;DataOutputStream dos;public ClientThread(Socket s,List list){this.list = list;this.s = s;try {dis = new DataInputStream(s.getInputStream());dos = new DataOutputStream(s.getOutputStream());} catch (IOException e) {e.printStackTrace();}}public void run(){// 接受信息 并且把接受信息发送给所有人while(true){try {String msg = dis.readUTF();for (int i = 0; i < list.size(); i++) {ClientThread ct = (ClientThread)list.get(i);ct.dos.writeUTF(this.getName()+"--"+msg);ct.dos.flush();}} catch (IOException e) {e.printStackTrace();}}}}
0 0
- 网络编程-局域网通信
- 网络编程~C++实现局域网通信
- 【java】【soversocket】网络编程,局域网通信
- 局域网网络编程
- 局域网网络编程
- 局域网网络编程
- C# 网络编程(1)——C# 简单实现局域网内通信
- Linux Socket 网络编程 基于GTK+ 的多线程实现的局域网通信软件
- 《网络通信编程》教学大纲
- java网络通信编程
- 网络通信 Socket 编程
- 网络编程--UDP通信
- java网络通信编程
- 网络通信编程
- Java网络通信编程
- 网络编程-udp通信
- 网络编程-Tcp通信
- java网络通信编程
- yii中urlmanager配置
- lintcode,将二叉树拆成链表
- JS基础——运行脚本
- Android 多渠道打包基础(友盟)
- Face Alignment at 3000 FPS通俗易懂讲解二 LBP局部二进制特征(特征映射)的生成
- 网络编程-局域网通信
- 动手DIY一个underscorejs库及underscorejs源码分析3
- MAC OSX环境下cordova和ionic的安装配置
- shell中条件判断if中的-z到-d的意思
- jsp语法基础(二)
- 驱动与硬件的关系
- 大作业(一)之音乐播放器
- 伪类与伪元素
- 【Android休眠】之kernel电源管理