Java网络编程学习笔记
来源:互联网 发布:零售行业数据分析 编辑:程序博客网 时间:2024/05/16 19:17
Java网络编程,我们先来看下面这一张图:
由图可得:想要进行网络编程,首先是服务器端通过ServerSocket对某一个端口进行监听。通过accept来判断是否有客户端与其相连。若成功连上,则通过readline和println函数来进行数据的发送和接收。实现网络编程。
示例如下:
服务器端代码:
/* * 功能:演示Java网络编程的服务器端 * author:ywq */import java.io.*;import java.net.*;public class TestServer {InputStreamReader isr;BufferedReader br;PrintWriter pw;public static void main(String[] args) {TestServer ts=new TestServer();} public TestServer() { try { //监听某个端口ServerSocket ss=new ServerSocket(9999);System.out.println("我是socket服务器正在监听9999端口.........");//等待某个客户端来连接,accept()函数将返回一个socket连接Socket s=ss.accept();//要读取s中传递的数据isr =new InputStreamReader(s.getInputStream());br=new BufferedReader(isr); //通过readline()函数来读写数据 String info=br.readLine(); System.out.println("服务器收到的消息为:"+info);//我们通过pw向s写数据,true表示即时刷新 pw=new PrintWriter(s.getOutputStream(),true); pw.println("你也好,我是服务器!!!"); } catch (IOException e) { e.printStackTrace();}finally{ try { if(pw!=null) pw.close();if(br!=null) br.close();if(isr!=null) isr.close();} catch (IOException e) {e.printStackTrace(); }} }}
客户端代码:
/* * 功能:这是一个客户端,可以连接服务器端 * author:ywq */import java.io.*;import java.net.*;public class TestClient {InputStreamReader isr;BufferedReader br;PrintWriter pw;public static void main(String[] args) {TestClient tc=new TestClient();}public TestClient(){try {//socket()函数就是去连接某个服务器,ip+端口Socket s=new Socket("127.0.0.1",9999);//如果s连接成功,就可以发送数据到服务器端//我们通过pw向s写数据,true表示即时刷新 pw=new PrintWriter(s.getOutputStream(),true); pw.println("你好,我是客户端!!!");//读取s中传递的数据isr =new InputStreamReader(s.getInputStream());br=new BufferedReader(isr);/ /通过readline()函数来读写数据 String info=br.readLine();System.out.println("客户端收到的消息为:"+info);} catch (IOException e) {e.printStackTrace();}finally{try {if(pw!=null) pw.close();if(br!=null)br.close();if(isr!=null)isr.close();} catch (IOException e) {e.printStackTrace();}}}}
发送数据时用到了PrintlnWriter对象,标准形式为:
PrintWriter pw=new PrintWriter(s.getOutputStream(),true)其中true参数表示即时刷新。
通过InputStreamReader以及readline函数来实现数据的读取。
下边是一个半双工的示例:
服务器端代码:
/* * 功能:演示从控制台进行对话 * author:ywq */import java.net.*;import java.io.*;public class TestServer {InputStreamReader isr,isr2;BufferedReader br,br2;PrintWriter pw;public static void main(String[] args) {// TODO Auto-generated method stubTestServer ts=new TestServer();} public TestServer(){try {ServerSocket ss=new ServerSocket(3002);System.out.println("服务器在监听3002端口...");//判断是否有客户端连接Socket s=ss.accept();//读取来自客户端的消息isr=new InputStreamReader(s.getInputStream());br=new BufferedReader(isr);pw=new PrintWriter(s.getOutputStream(),true);//接收从控制台输入的信息isr2=new InputStreamReader(System.in);br2=new BufferedReader(isr2);while(true){String respone=br.readLine();if(respone.equals("再见")) {System.out.println("对话结束"); s.close(); break; }System.out.println("客户端说:"+respone);System.out.println("请输入要发送到客户端的信息:");String info=br2.readLine();//将消息发送给客户端pw.println(info);if(info.equals("再见")) {System.out.println("对话结束"); s.close(); break; }}} catch (IOException e) {e.printStackTrace();}finally{if(br2!=null)try {br2.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}if(isr2!=null)try {isr2.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}if(pw!=null) pw.close();if(br!=null)try {br.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}if(isr!=null)try {isr.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}
客户端代码如下:
/* * 功能:这是一个客户端,实现从控制台输入数据 * author:ywq */import java.io.*;import java.net.*;public class TestClient {InputStreamReader isr,isr2;BufferedReader br,br2;PrintWriter pw;public static void main(String[] args) {// TODO Auto-generated method stubTestClient tc=new TestClient();}public TestClient(){try {Socket s=new Socket("127.0.0.1",3002); pw=new PrintWriter(s.getOutputStream(),true); //从控制台接收消息 isr=new InputStreamReader(System.in); br=new BufferedReader(isr); //从服务器接收信息 isr2=new InputStreamReader(s.getInputStream()); br2=new BufferedReader(isr2); while(true) { System.out.println("请说出你想对服务器说的话,按回车键结束"); //得到从控制台输入的消息 String resp=br.readLine(); //将数据发送给服务器 pw.println(resp); if(resp.equals("再见")) { System.out.println("客户端使对话结束"); s.close(); break; } String respo=br2.readLine(); if(respo.equals("再见")) { System.out.println("服务器使对话结束"); s.close(); break; } System.out.println("服务器说:"+respo); }} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{if(br2!=null)try {br2.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}if(isr2!=null)try {isr2.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}if(pw!=null) pw.close();if(br!=null)try {br.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}if(isr!=null)try {isr.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}
自此,学到了基本的Java网络编程知识,有待进一步拓展。
进一步学习:
下面看一个简易对讲机的实现:
服务器端代码:
/* * 功能:这是一个服务器,实现简易的对讲机,带界面 * author:ywq */import javax.swing.*;import java.net.*;import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.io.*;public class TestServer3 extends JFrame implements ActionListener{//定义组件JTextArea jta=null;JTextField jtf=null;JButton jb=null;JPanel jp=null;JScrollPane jsp=null;InputStreamReader isr=null;BufferedReader br=null;PrintWriter pw=null;public static void main(String[] args) {// TODO Auto-generated method stubTestServer3 ts=new TestServer3();} public TestServer3(){//创建组件jta=new JTextArea();jtf=new JTextField(10);jb=new JButton("发送");//设置监听jb.addActionListener(this);jsp=new JScrollPane(jta);jp=new JPanel();jp.add(jtf);jp.add(jb);this.add(jp,"South");this.add(jsp,"Center");this.setSize(300, 300);this.setVisible(true);this.setTitle("简易QQ聊天--服务器");this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//建立socket连接try {ServerSocket ss=new ServerSocket(1234);Socket s=ss.accept();isr=new InputStreamReader(s.getInputStream());br=new BufferedReader(isr);pw=new PrintWriter(s.getOutputStream(),true);//做一个循环while(true){//在循环中读取来自客户端的消息并且显示String info=br.readLine();jta.append("客户端说: "+info+"\r\n");}} catch (IOException e) {e.printStackTrace();}}@Overridepublic void actionPerformed(ActionEvent e) {//进行相应的操作if(e.getSource()==jb){//点击发送按钮后,将消息发送出去String resp=jtf.getText();jta.append("你对客户端说: "+resp+"\r\n");pw.println(resp);jtf.setText(" ");}}}
客户端如下:
/* * 功能:这是一个客户端。可以实现简易对讲机 * author:ywq */import javax.swing.*;import java.net.*;import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.io.*; public class TestClient3 extends JFrame implements ActionListener{ //定义组件JTextArea jta=null;JTextField jtf=null;JButton jb=null;JPanel jp=null;JScrollPane jsp=null;InputStreamReader isr=null;BufferedReader br=null;PrintWriter pw=null;public static void main(String[] args) {// TODO Auto-generated method stubTestClient3 tc=new TestClient3();}public TestClient3(){//创建组件jta=new JTextArea();jtf=new JTextField(10);jb=new JButton("发送");//设置监听jb.addActionListener(this);jsp=new JScrollPane(jta);jp=new JPanel();jp.add(jtf);jp.add(jb);this.add(jp,"South");this.add(jsp,"Center");this.setSize(300, 300);this.setVisible(true);this.setTitle("简易QQ聊天--客户端");this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//建立socket连接try {Socket s=new Socket("127.0.0.1",1234); isr=new InputStreamReader(s.getInputStream());br=new BufferedReader(isr);pw=new PrintWriter(s.getOutputStream(),true);while(true){ //在循环中读取来自服务器的消息,并且显示 String info=br.readLine();jta.append("服务器说: "+info+"\r\n");}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}@Overridepublic void actionPerformed(ActionEvent e) {//点击发送按钮后,将消息发送出去if(e.getSource()==jb){String resp=jtf.getText();jta.append("你对服务器说: "+resp+"\r\n");pw.println(resp);//清空jtf.setText(" ");}}}
代码执行过程截图如下:
由截图可以看出:本实例较好的实现了聊天功能。但是距离真的模拟QQ聊天技术还差很多。有待进一步改进。
4 0
- java网络编程学习笔记
- JAVA网络编程学习笔记
- java网络编程学习笔记
- java学习笔记-网络编程
- Java网络编程 学习笔记
- Java学习笔记------网络编程
- java学习笔记网络编程
- Java网络编程学习笔记
- java学习笔记------Java网络编程三
- java学习笔记-----java网络编程四
- java学习笔记------java网络编程五
- 寒假Java网络编程学习笔记
- Java学习笔记(七、网络编程基础)
- Java 网络编程 学习笔记一 基础知识
- 黑马程序员-java学习笔记-网络编程
- Java SE学习笔记-网络编程
- 黑马程序员-java学习笔记-网络编程
- java学习笔记——网络编程
- 使用VBA合并多个EXCEL文件到一个EXCEL文件
- Codeforces Round #342 (Div. 2) 题解
- centos6.5安装openoffice和swftools
- .Net是一门好语言!
- test0222
- Java网络编程学习笔记
- virtualbox5.0 安装centos6.7宿主机和虚拟机互通的问题
- linker command failed with exit code 1 (use -v to see invocation)
- DiskFileItemFactory类
- 在windows下编译nginx
- POJ 3264Balanced Lineup(线段树)
- 【CSS3】嵌入字体@font-face
- POJ-1251 Jungle Roads
- 10004---linux下vi命令大全