利用套接字进行网络编程
来源:互联网 发布:网络教育专科学历 编辑:程序博客网 时间:2024/05/19 01:29
创建两个java类,Server.java和Client.java。
Client.java代码:
package main;import java.io.*;import java.net.*;public class Client { public static void main(String[] args) { // TODO code application logic here try{ Socket connectToServer=new Socket("localhost",5500);//连接到本机,端口号5500 DataInputStream inFromServer=new DataInputStream( connectToServer.getInputStream());//将数据输入流连接到socket上 DataOutputStream outToServer=new DataOutputStream( connectToServer.getOutputStream());//将数据输出流连接到socket上 System.out.println("输入半径数值发送到服务器,输入bye结束。"); String outStr,inStr; boolean goon=true; BufferedReader buf=new BufferedReader( new InputStreamReader(System.in));//将用户输入的数据保存在buf中 while(goon){ outStr=buf.readLine();//读入用户的输入 outToServer.writeUTF(outStr);//写到已经连接socket的数据输出流中 outToServer.flush();//flush()表示强制将缓冲区中的数据发送出去,不必等到缓冲区满. inStr=inFromServer.readUTF();//从已经连接socket的数据输入流中读数据(就是说读服务器返回的数据) if(!inStr.equals("bye"))//如果返回的不是bye,就输出返回的数据 System.out.println("从服务器返回的结果是"+inStr); else //否则结束客户端的输入 goon=false; } inFromServer.close(); //关闭输入流 outToServer.close(); //关闭输出流 connectToServer.close();//关闭socket }catch(IOException e){ e.printStackTrace(); } }}
Server.java代码:
package main;import java.io.*;import java.net.*;public class Server { public static void main(String[] args){ try{ System.out.println("等待连接"); ServerSocket serverSocket=new ServerSocket(5500);//服务端创建监听端口的ServerSocket Socket connectToClient=serverSocket.accept(); //ServerSocket对象调用accept()方法在指定的端口监听到来的连接。accept()一直处于阻塞状态,直到有客户端试图建 //立连接。这时accept()方法返回连接客户端与服务器的Socket对象 System.out.println("连接请求来自"+ connectToClient.getInetAddress().getHostAddress());//获得套接字连接的地址 DataInputStream inFromClient=new DataInputStream( connectToClient.getInputStream());//获得套接字所用的输入流 DataOutputStream outToClient=new DataOutputStream( connectToClient.getOutputStream());//获得套接字所用的输出流 String str; double radius,area; boolean goon=true; while(goon){ str=inFromClient.readUTF(); if(!str.equals("bye")){ radius=Double.parseDouble(str);//字符串封装为double型 System.out.println("接收到的半径值为:"+radius); area=radius*radius*Math.PI; str=Double.toString(area);//double封装为字符串类型 outToClient.writeUTF(str); outToClient.flush(); System.out.println("圆面积"+str+"已经发送"); }else{ goon=false; outToClient.writeUTF("bye"); outToClient.flush(); } } inFromClient.close(); outToClient.close(); serverSocket.close(); }catch(IOException e){ e.printStackTrace(); } }}
运行结果:
先运行Server.java,右键运行文件,
再运行Client.java,
可见连接成功。
在客户端输入2,
从服务器返回结果成功。
注:
1、
BufferedReader buf=new BufferedReader(new InputStreamReader(System.in));
上面可以写成:
InputStream input = System.in; BufferedReader buf = new BufferedReader(new InputStreamReader(input));
2、
connectToClient.getInetAddress().getHostAddress();
socket.getInetAddress()返回InetAddress对象包含远程计算机的IP地址。InetAddress.getHostAddress()返回String对象与该地址的文本表示。可以写成:
InetAddress addr = socket.getInetAddress();String remoteIp = addr.getHostAddress();
总结
Socket是网络驱动层提供给应用程序的接口和一种机制,能执行7种基本操作:
(1)连接到远程机器
(2)绑定到端口
(3)接收从远程极其来的绑定端口上的连接
(4)监听到达的数据
(5)发送数据
(6)接收数据
(7)关闭连接
0 0
- 利用套接字进行网络编程
- 使用windows套接字进行网络编程
- MFC中网络编程,利用套接字的过程。
- 【网络编程】利用流式套接字实现文件传输实验
- 网络套接字编程
- 初识TCP/IP及使用套接字进行网络编程
- 利用套接字进行数据传输
- Linux网络编程 套接字
- 网络编程原始套接字
- 套接字网络编程笔记
- 网络编程原始套接字
- Linux网络编程 套接字
- 网络编程--套接字选项
- 网络编程(套接字)
- 《网络编程》路由套接字
- UNIX网络编程:套接字
- Python 网络套接字编程
- 网络编程之套接字
- DB2删除大表数据
- 格雷码的实现
- Python——sorted
- 在Linux下安装python package到指定目录
- Json概述以及python对json的相关操作
- 利用套接字进行网络编程
- Apache Kylin (v1.5.0) 发布,全新设计的新一代
- json----json----json--json---json
- 软件模式(简单工厂模式、工厂方法模式、抽象工厂模式)
- Java中千变万化字符串
- iOS9-URLScheme适配-引入白名单概念
- Class.forName和ClassLoader.loadClass的比较
- 二维数组 指针 形参 用一个关系图解决问题
- Qt5 趣学(2):电子钟