Java Socket编程
来源:互联网 发布:演唱会门票制作软件 编辑:程序博客网 时间:2024/05/21 14:41
Socket:
两个java应用程序可通过一个双向的网络通信连续实现数据交换,这个双向链路的一端称为一个Socket。
Socket通常用来实现client-server连接。
Java.net包中定义的两个类socket和ServerSocket,分别用来实现双向连接的client和server端(像qq那样,互相通信)。
建立连接时所需要的寻址信息为远程计算机的IP地址和端口号(port number)。
TCPSocket模型:
过程:
一个Server端多个Client端:
一端和另一段说话一端说一端听:
server端:
import java.net.*;//一端和另外一端说话,一端说一端听。/* 1 java Socket编程步骤。 * 2 Socket/ServerSocker类用法。 * 3 通过Socket对象可以获取通信对方Socket的信息。 * */import java.io.*;public class TestServer { public static void main(String[] args) { try { //在服务器端建立自己的一个插座口。 ServerSocket s = new ServerSocket(8888); while(true) { //接受来自客户端的请求。 Socket s1 = s.accept(); //写入到Client的管道(流) OutputStream os = s1.getOutputStream(); //在管道上加上一层保障。也就是形成双层管道。 DataOutputStream dos = new DataOutputStream(os); //和客户端通话,写入到客户端。 //字符串hello ip地址,端口号。 //客户端这样可以从服务器端读出了。 dos.writeUTF("Hello" + s1.getInetAddress() + "port#" + s1.getPort()+ " bye-bye!"); dos.close(); s1.close(); } } catch(IOException e) { e.printStackTrace(); System.out.println("程序运行出错:" + e); } } } getInetAddress()得到ip地址的超集,包含ip地址也可以包括其他的地址。.getPort() 得到端口号。server端写入到client端。
Client端:
Client端从server端读取:
import java.net.*;import java.io.*; /*1 java Socket编程。 *2 Socket/ServerSocket类用法。 *3 通过Socket对象可以获取通信对方Socket信息。 */public class TCPClient { public static void main(String[] args) {try{ //建立客户端的那个“插座接口”,并且通过构造方法和服务器端的那个接口相连接。 Socket s1 = new Socket("127.0.0.1",8888); //读来自服务器端的数据流。 InputStream is = s1.getInputStream(); //DataInputStream 需要套接在InputStream上。 DataInputSteam dis = new DataInputStream(is); //进行读出来自服务器端的数据流。通过UTF编码读出。 System.out.println(dis.readUTF()); //关闭管道。 dis.close(); //关闭socket接口通信。 s1.close(); }catch(ConnectException connExc)//捕捉到不同的异常进行不同的处理。 { connExc.printStackTrace(); System.err.println("服务器链接失败!"); }catch(IOException e) { e.printStackTrace(): } } }
结果如下:
接通后两端都说都听:
server端:
import java.net.*;//两端都说两端都听,但是要有顺序,这和当时的传呼机感觉类似。/* 1 java Socket编程步骤。 * 2 Socket/ServerSocker类用法。 * 3 通过Socket对象可以获取通信对方Socket的信息。 * */import java.io.*; public class TestSocketServer { public static void main(String[] args) { InputStream in = null; OutputStream out = null; try { //在服务器端建立自己的一个插座口。 ServerSocket ss = new ServerSocket(5888); //接受来自客户端的请求。 Socket socket = ss.accept(); //得到来自客户端写入的数据。 in = socket.getInputStream(); //服务器端输出流对象。 out = socket.getOutputStream(); //捆绑在两个管子上的传输管。 DataOutputStream dos = new DataOutputStream(out); DataInputStream dis = new DataInputStream(in); //定义从客户端读出的字符串。 String s = null //如果读出的不为空的话。向客户单发出本机的ip地址和连接的端口号。 if((s=dis.readUTF())!=null) { System.out.println(s); System.out.println("from:" +socket.getInetAddress()); System.out.println("port: " + socket.getPort()); } //向客户端写入。 dos.writeUTF("hi,hello"); //关闭流对象。 dis.close(); dos.close(); socket.close(); } catch(IOException e) { e.printStackTrace(); System.out.println("程序运行出错:" + e); } } }
Client端:
import java.net.*;import java.io.*; /*1 java Socket编程。 *2 Socket/ServerSocket类用法。 *3 通过Socket对象可以获取通信对方Socket信息。 */public class TestSocketClient { public static void main(String[] args) { InputStream is = null; OutputStream os = null; try { //建立客户端的那个“插座接口”,并且通过构造方法和服务器端的那个接口相连接。 Socket socket = new Socket("localhost",5888); is = socket.getInputStream(); os = socket.getOutputStream(); DataInputStream dis = new DataInputStream(is); DataOutputStream dos = new DataOutputStream(os); //写入. dos.writeUTF("hey"); String s = null; if((s=dis.readUTF())!=null) { System.out.println(s); } dos.close(); dis.close(); socket.close(); }catch(UnknownHostException e)//捕捉到不同的异常进行不同的处理。 { e.printStackTrace(); }catch(IOException e) { e.printStackTrace(); } } }
点对点的通信:
就像qq那样同时可以说同时可以听,可以一边说一边听,像打电话一样。
就不在这里列出了。
- Java Socket编程
- Java Socket编程
- Java Socket编程(
- JAVA SOCKET编程
- Java Socket编程
- Java Socket编程
- java socket编程
- Java Socket编程
- Java Socket编程之一
- java socket编程
- Java Socket编程
- Java Socket编程
- Java Socket编程介绍
- Java Socket编程
- Java Socket编程
- java socket编程范例
- Java Socket编程
- java Socket编程基础
- 双向口 与 准双向口 区别
- 计算机是如何启动的?
- 腾讯抄你肿么办
- 在程序退出时自动清理资源-atexit
- 如何使用Nginx配置虚拟服务器和做负载均衡
- Java Socket编程
- 一个空类会生成哪些默认函数
- 最简单的查询表空间的使用量、剩余量的方法
- JavaScript学习小结
- 获取本地IP
- map
- tornado开发学习之1.HelloWorld和它加强版版本
- jquery之ajaxfileupload异步上传插件
- 在CentOS中部署Python和配置PyCharm开发环境