网络编程-局域网通信

来源:互联网 发布:数据分析师是什么专业 编辑:程序博客网 时间:2024/04/30 05:05
网络编程的定义


使用代码来完成,两个或者多个应用程序,之间的通过某种协议进行数据传递,这就是网络编程。



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
原创粉丝点击