Java学习之路0805(基于TCP带有界面的网络通信)
2015-08-16 19:47
731 查看
(一)
客户端
public class MyClientRead implements Runnable{ private MyClient client; public MyClientRead(MyClient client){ this.client=client; } @Override public void run() { while(true){ client.read(); } } }
客户端界面
import java.awt.EventQueue; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.net.Socket; import java.net.UnknownHostException; import java.util.Calendar; import javax.swing.DefaultListModel; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JList; import javax.swing.JPanel; import javax.swing.JTextArea; import javax.swing.border.EmptyBorder; import javax.swing.plaf.basic.DefaultMenuLayout; import net.sf.json.JSONObject; public class MyClient extends JFrame { private JPanel contentPane; private Socket socket; private JTextArea textArea; private JList list; private DefaultListModel<String> modle; private JTextArea textArea_1; /** * Launch the application. */ public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { MyClient frame = new MyClient(); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } /** * Create the frame. */ public MyClient() { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, 819, 598); contentPane = new JPanel(); contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); setContentPane(contentPane); contentPane.setLayout(null); textArea = new JTextArea(); textArea.setBounds(49, 436, 500, 101); contentPane.add(textArea); JButton btnNewButton = new JButton("发送"); btnNewButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { String msg=createMessage(); write(msg); } }); btnNewButton.setBounds(589, 436, 129, 101); contentPane.add(btnNewButton); list = new JList(); list.setBounds(61, 10, 484, 416); modle = new DefaultListModel<>(); list.setModel(modle); contentPane.add(list); JButton btnNewButton_1 = new JButton("连接服务器"); btnNewButton_1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { try { System.out.println("连接服务器"); socket = new Socket("192.168.0.82", 8080); System.out.println("连接服务器成功"); Thread t = new Thread(new MyClientRead(MyClient.this)); t.start(); } catch (UnknownHostException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } }); btnNewButton_1.setBounds(615, 68, 103, 86); contentPane.add(btnNewButton_1); textArea_1 = new JTextArea(); textArea_1.setBounds(578, 268, 178, 36); contentPane.add(textArea_1); } public void read() { try { InputStream is = socket.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(is)); String line = br.readLine(); modle.addElement("" + line); System.out.println(line); } catch (IOException e) { e.printStackTrace(); } } /** * * @return 返回一个发送给所有人的信息 */ public String createMessage(){ String msg = textArea.getText(); JSONObject obj = new JSONObject(); obj.put("message", msg); obj.put("type", "toSingle"); // 得到时间 Date Calendar Date date=new Date() date.getTime(); Calendar calendar = Calendar.getInstance(); long time = calendar.getTimeInMillis();// 得到此时距1970的毫秒数 obj.put("time", "" + time); obj.put("from", socket.getInetAddress().getHostAddress()); obj.put("to", textArea_1.getText()); System.out.println(obj.toString()); return obj.toString(); } /** * 将此信息发送给服务器 * @param msg 即将发送的信息 */ public void write(String msg) { try { OutputStream os=socket.getOutputStream(); OutputStreamWriter osw=new OutputStreamWriter(os); BufferedWriter bw=new BufferedWriter(osw); bw.write(msg+"\n"); bw.flush(); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } }
服务器
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.Socket; public class MyServerRead implements Runnable { private Socket socket; private MyServer server; public MyServerRead(Socket socket,MyServer server) { this.socket=socket; this.server=server; } @Override public void run() { try { InputStream is=socket.getInputStream();//只能读字节 InputStreamReader isr=new InputStreamReader(is);//读字符 BufferedReader br=new BufferedReader(isr);// while(true){ String line=br.readLine(); server.readLine(line); System.out.println(line); } } catch (IOException e) { e.printStackTrace(); } } }
服务器界面
import java.awt.EventQueue; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.net.ServerSocket; import java.net.Socket; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.Set; import javax.swing.DefaultListModel; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JList; import javax.swing.JPanel; import javax.swing.JTextArea; import javax.swing.border.EmptyBorder; import net.sf.json.JSONObject; public class MyServer extends JFrame { private JPanel contentPane; private HashMap<String, Socket> sockets; private boolean isRunning = true; private JTextArea textArea; private DefaultListModel<String> modle; public boolean isRunning() { return isRunning; } public void setRunning(boolean isRunning) { this.isRunning = isRunning; } /** * Launch the application. */ public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { MyServer frame = new MyServer(); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } /** * Create the frame. */ public MyServer() { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, 861, 742); contentPane = new JPanel(); contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); setContentPane(contentPane); contentPane.setLayout(null); JButton button = new JButton("\u542F\u52A8\u670D\u52A1"); button.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { System.out.println("启动服务,等待客户端链接"); Runnable run=new Runnable() { @Override public void run() { try { ServerSocket server = new ServerSocket(8080); sockets=new HashMap<>(); while (true) { Socket socket = server.accept();// 等待客户端链接 System.out.println("客戶端链接进来"+socket.getInetAddress().getHostAddress()); String ip=socket.getInetAddress().getHostAddress(); sockets.put(ip, socket); MyServerRead msr=new MyServerRead(socket,MyServer.this); Thread thread=new Thread(msr); thread.start(); } } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } }; Thread t=new Thread(run); t.start(); } }); button.setBounds(22, 10, 475, 87); contentPane.add(button); textArea = new JTextArea(); textArea.setBounds(100, 476, 518, 138); contentPane.add(textArea); JButton button_1 = new JButton("发送给客户"); button_1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { modle.addElement(textArea.getText()); } }); button_1.setBounds(671, 531, 93, 23); contentPane.add(button_1); modle = new DefaultListModel<>(); JList list = new JList(); list.setModel(modle); list.setBounds(100, 107, 518, 363); contentPane.add(list); } /** * 这个方法的目的是将信息放到界面上 */ public void readLine(String line){ JSONObject obj=JSONObject.fromObject(line); String type=obj.getString("type"); if(type.equals("toSingle")){ String msg=obj.getString("message"); String to=obj.getString("to"); String from=obj.getString("from"); String time=obj.getString("time"); Socket toSocket=sockets.get(to); try { OutputStream os=toSocket.getOutputStream(); BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(os)); bw.write(msg+"\n"); bw.flush(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } modle.addElement(line); } /** * 这里是服务器发送的信息 */ public void write(String msg) { try { //sockets中存放所有的链接 Set<String> keys = sockets.keySet();//得到HashMap中的所有key Iterator<String> it = keys.iterator();//keys的迭代器 while (it.hasNext()) { Socket socket = sockets.get(it.next()); OutputStream os = socket.getOutputStream(); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os)); System.out.println("服务器发送信息"); bw.write(msg + "\n"); bw.flush(); } textArea.setText(""); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
(二)
客户端
public class MyClient implements Runnable{ private StartClient client; public MyClient(StartClient client) { this.client=client; } @Override public void run() { // TODO Auto-generated method stub while (true) { client.rend(); } }
客户端界面
import java.awt.BorderLayout; import java.awt.Color; import java.awt.EventQueue; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.border.EmptyBorder; import net.sf.json.JSONObject; import javax.swing.JButton; import java.awt.event.ActionListener; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.UnsupportedEncodingException; import java.net.Socket; import java.net.UnknownHostException; import java.util.Calendar; import java.awt.event.ActionEvent; import javax.swing.JTextArea; import javax.swing.JLabel; public class StartClient extends JFrame{ private StartClient startclient; private JPanel contentPane; static boolean isRend=false; private JTextArea textArea; private JTextArea textArea_1; private Socket socket; private JTextArea textArea_2; private JTextArea textArea_3; /** * Launch the application. */ public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { StartClient frame = new StartClient(); frame.setTitle("客户端"); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } /** * Create the frame. */ public StartClient() { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, 450, 300); contentPane = new JPanel(); contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); setContentPane(contentPane); contentPane.setLayout(null); JButton button = new JButton("\u8FDE\u63A5\u670D\u52A1\u5668"); button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { try { System.out.println("开始连接服务器---"); socket=new Socket("192.168.0.82", 8080); System.out.println("服务器连接成功"); MyClient client=new MyClient(StartClient.this); Thread threadClient=new Thread(client); threadClient.start(); } catch (UnknownHostException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } }); button.setBounds(331, 10, 93, 23); contentPane.add(button); JButton button_1 = new JButton("\u53D1\u9001"); button_1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.out.println("开始写数据"); // System.out.println(textArea_3.getText()); String msg=creatMessage(); System.out.println(msg); write(msg); } }); button_1.setBounds(331, 216, 93, 23); contentPane.add(button_1); textArea = new JTextArea(); textArea.setBounds(10, 216, 303, 23); contentPane.add(textArea); textArea_1 = new JTextArea(); textArea_1.setBounds(10, 10, 303, 196); contentPane.add(textArea_1); textArea_2 = new JTextArea(); textArea_2.setBounds(331, 140, 93, 23); contentPane.add(textArea_2); textArea_3 = new JTextArea(); textArea_3.setBounds(331, 83, 93, 23); contentPane.add(textArea_3); JLabel label = new JLabel("\u6635\u79F0"); label.setBounds(358, 55, 54, 15); contentPane.add(label); JLabel label_1 = new JLabel("\u5BF9\u65B9\u6635\u79F0"); label_1.setBounds(341, 116, 54, 15); contentPane.add(label_1); } public void rend(){ try { InputStream is=socket.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(is)); // String s=br.readLine(); JSONObject respone=JSONObject.fromObject(br.readLine()); String s=respone.getString("message"); String nicheng=respone.getString("from"); textArea_1.append(nicheng+"说:"+s+"\n"); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void write(String msg){ try { BufferedWriter bw; bw=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); String s=textArea.getText(); bw.write(msg+"\n"); bw.flush(); // System.out.println(msg); String me=textArea_3.getText(); textArea_1.append(me+"说:"+s+"\n"); textArea.setText(""); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } public String creatMessage(){ String msg=textArea.getText(); JSONObject obj=new JSONObject(); Calendar calendar=Calendar.getInstance(); long time=calendar.getTimeInMillis(); obj.put("type", "toSingle"); obj.put("message", msg); obj.put("time", ""+time); obj.put("from", textArea_3.getText()); obj.put("to", textArea_2.getText()); System.out.println(obj.toString()); return obj.toString(); } }
服务器
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.Socket; public class MyServer implements Runnable{ private StartServer server; private Socket socket; public MyServer(StartServer server,Socket socket) { this.server=server; this.socket=socket; } @Override public void run() { // TODO Auto-generated method stub // server=new StartServer(); try { BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream())); while (true) { String line = br.readLine(); System.out.println("收到的数据"+line); server.readLine(line); System.out.println(line); // server.textArea_1.append("客户端说:"+line+"\n"); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } // while (true) { // server.rend(); // } } }
服务器界面
import java.awt.BorderLayout; import java.awt.Color; import java.awt.EventQueue; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.border.EmptyBorder; import net.sf.json.JSON; import net.sf.json.JSONObject; import javax.swing.DefaultListModel; import javax.swing.JButton; import java.awt.event.ActionListener; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.net.ServerSocket; import java.net.Socket; import java.util.Calendar; import java.util.HashMap; import java.awt.event.ActionEvent; import javax.swing.JTextArea; public class StartServer extends JFrame { private StartServer startserver; private JPanel contentPane; static boolean isRend=false; public Socket socket; public JTextArea textArea ; public JTextArea textArea_1; private HashMap sockets; private DefaultListModel<String> modle; private String ip; private String frome; /** * Launch the application. */ public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { StartServer frame = new StartServer(); frame.setTitle("服务器"); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } /** * Create the frame. */ public StartServer() { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, 450, 300); contentPane = new JPanel(); contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); setContentPane(contentPane); contentPane.setLayout(null); JButton btnNewButton = new JButton("启动服务"); btnNewButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.out.println("启动服务"); Thread t=new Thread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub try { ServerSocket serversocket=new ServerSocket(8080); sockets=new HashMap<>(); while (true) { socket=serversocket.accept(); ip=socket.getInetAddress().getHostAddress(); System.out.println(ip); // sockets.put(ip, socket); System.out.println("客户端已连接进来"); MyServer server=new MyServer(StartServer.this,socket); Thread threadServe=new Thread(server); System.out.println("准备接收数据"); threadServe.start(); BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream())); String s=br.readLine(); JSONObject obj=JSONObject.fromObject(s); frome=obj.getString("from"); sockets.put(frome, socket); } } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } }); t.start(); } }); btnNewButton.setBounds(353, 10, 81, 23); contentPane.add(btnNewButton); textArea = new JTextArea(); textArea.setBounds(20, 229, 329, 23); contentPane.add(textArea); JButton btnNewButton_1 = new JButton("发送"); btnNewButton_1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.out.println("开始发送数据"); // String msg=creatMessage(); // write(); } }); btnNewButton_1.setBounds(359, 229, 75, 23); contentPane.add(btnNewButton_1); textArea_1 = new JTextArea(); textArea_1.setBounds(20, 10, 329, 209); contentPane.add(textArea_1); } public void readLine(String line){ System.out.println("接收到数据: "+line); JSONObject obj=JSONObject.fromObject(line); String type=obj.getString("type"); if(type.equals("toSingle")){ System.out.println("开始转发"); String msg=obj.getString("message"); String to=obj.getString("to"); String from=obj.getString("from"); String time=obj.getString("time"); // Socket toSocket=(Socket) sockets.get(ip); frome=to; Socket toSocket=(Socket) sockets.get(frome); System.out.println(sockets.get(ip) instanceof Socket); try { OutputStream os=toSocket.getOutputStream(); BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(os)); bw.write(obj.toString()+"\n"); bw.flush(); textArea_1.append(from+":"+msg+"\n"); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } // modle.addElement(line); } public void rend(){ try { InputStream is=socket.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(is)); String s=br.readLine(); System.out.println("开始通话"); textArea_1.append("客户端说:"+s+"\n"); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void write(){ BufferedWriter bw; try { bw=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); String s=textArea.getText(); bw.write(s+"\n"); bw.flush(); textArea_1.append("服务器说:"+s+"\n"); textArea.setText(""); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } }
相关文章推荐
- 百购团购网骗钱(被完美世界(北京)网络技术有限公司骗钱经过)
- 20个你可能不知道的 Linux 网络工具
- Android笔记_网络编程
- IOS之网络状态设和NSUserDefaults的synchronize
- java的多线程同步及锁的机制 http://f.dataguru.cn/thread-483280-1-1.html (出处: 炼数成金)
- HTTP详解-工作原理
- Nginx搭建HTTPS服务器和强制使用HTTPS访问的方法
- android使用HttpURLConnection实现带参数文件上传
- Java学习之路0803(URL、基于UDP的数据包网络通信)
- Java学习之路0802(网络通信)
- 网络编程笔记一:基础入门
- 《C和指针(Pointer on c)》 学习笔记(转自:http://dsqiu.iteye.com/blog/1687944)
- Android使用Universal-ImageLoader在ListView中加载网络图片简单示例
- 基础知识---计算机各层网络协议 (图)
- Http协议
- Android-通过网络获取xml文件使用pull解析得到服务器中的信息(新闻客户端)
- android图片网络异步加载显示
- 计算机网络---三次握手,四次释放
- devstack安装报错解决方法:Failure creating NET_ID for xxxxx (ml2+ovs网络模式)
- https原理