Java Socket
来源:互联网 发布:动态最优化基础 pdf 编辑:程序博客网 时间:2024/05/29 14:14
TCP通信
通过ServerSocket指定端口号,Socket访问本机,控制台简单的输出交互。
服务端
ServerSocket ss = new ServerSocket(port);Socket s = ss.accept();
客户端
Socket s = new Socket(loaclhost,port);
下面贴出一个简单的交互实例:
package com.hz.speak;import java.io.BufferedReader;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.net.ServerSocket;import java.net.Socket;import java.net.SocketException;public class TestServer { public static void main(String[] args) { new TestServer().TestServerSocket(); } public void TestServerSocket() { DataOutputStream dos = null; DataInputStream dis = null; ServerSocket ss = null; Socket socket = null; try { ss = new ServerSocket(10000); socket = ss.accept();//阻塞 OutputStream os = socket.getOutputStream(); dos = new DataOutputStream(os); InputStream is = socket.getInputStream(); dis = new DataInputStream(is); InputStreamReader isr = new InputStreamReader(System.in); BufferedReader br = new BufferedReader(isr); String info; while(true){ info = dis.readUTF(); System.out.println("对方说:" + info); if(info.equals("bye")){ break; } info = br.readLine(); dos.writeUTF(info); if(info.equals("bye")){ break; } } } catch (SocketException e) { System.out.println("网络连接异常,程序退出!"); }catch (IOException e) { e.printStackTrace(); }finally{ try { if(dos != null){ dos.close(); } if(dis != null){ dis.close(); } if(socket != null){ socket.close(); } if(ss != null){ ss.close(); } } catch (IOException e) { e.printStackTrace(); } } }}
package com.hz.speak;import java.io.BufferedReader;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.net.Socket;import java.net.UnknownHostException;public class TestClient { public static void main(String[] args) { new TestClient().TestSocket(); } public void TestSocket() { DataInputStream dis = null; DataOutputStream dos = null; Socket socket = null; try { socket = new Socket("127.0.0.1", 10000); InputStream is = socket.getInputStream(); dis = new DataInputStream(is); OutputStream os = socket.getOutputStream(); dos = new DataOutputStream(os); InputStreamReader isr = new InputStreamReader(System.in); BufferedReader br = new BufferedReader(isr); String info; while(true){ info = br.readLine(); dos.writeUTF(info); if(info.equals("bye")){ break; } info = dis.readUTF(); System.out.println("对方说:" + info); if(info.equals("bye")){ break; } } } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally{ try { if(dis != null){ dis.close(); } if(dos != null){ dos.close(); } if(socket != null){ socket.close(); } } catch (IOException e) { e.printStackTrace(); } } }}
TCP简单的文件上传功能:
package com.hz.test;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.ServerSocket;import java.net.Socket;public class FileUploading { public static void main(String[] args) { try { ServerSocket serverSocket = new ServerSocket(10001); while(true){ //调用accept()方法接收客户端请求,得到Socket对象 Socket socket = serverSocket.accept(); //每当和客户端建立连接后,单独开启一个线程处理和客户端的交互 new Thread(new ServerThread(socket)).start(); } } catch (IOException e) { e.printStackTrace(); } }} class ServerThread implements Runnable{ private Socket socket; public ServerThread(Socket socket) { super(); this.socket = socket; } @Override public void run() { String ip = socket.getInetAddress().getHostAddress();//获取客户端的地址 int count = 1; try { InputStream in = socket.getInputStream(); File parentFile = new File("d:\\upload\\");//创建上传图片目录的File对象 if(!parentFile.exists()){//如果不存在,就创建这个目录 parentFile.mkdir(); } //把客户端的IP地址作为上传的文件名 File file = new File(parentFile,ip+"("+count+").jpg"); while(file.exists()){ //如果文件名存在,则把count++ file = new File(parentFile,ip+"("+(count++)+").jpg"); } //创建 FileOutputStream fos = new FileOutputStream(file); byte[] buff = new byte[1024]; int len = 0; while((len = in.read(buff)) != -1){ fos.write(buff, 0, len); } OutputStream out = socket.getOutputStream();//获取服务器的输出流 out.write("上传成功".getBytes()); fos.close(); socket.close(); } catch (IOException e) { e.printStackTrace(); } } }
package com.hz.test;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.Socket;import java.net.UnknownHostException;public class FileClient { public static void main(String[] args) { try { Socket socket = new Socket("127.0.0.1", 10001); OutputStream out = socket.getOutputStream(); //创建FileInputStream对象 FileInputStream fis = new FileInputStream("E:\\20160928JavaBase\\Test\\gg\\999.jpg"); byte[] buff = new byte[1024]; int len = 0; while((len = fis.read(buff))!= -1){ out.write(buff, 0, len); } socket.shutdownOutput();//关闭客户端输出流 InputStream in = socket.getInputStream(); byte[] buffMsg = new byte[1024]; int num = in.read(buffMsg);//接收服务端的消息 String Msg = new String(buffMsg, 0, num); System.out.println(Msg); fis.close(); socket.close(); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }}
如果实现界面的通信,可以参考我前面的ServerSocket+Swing+SQL Server2008聊天系统(好友私聊,聊天室群聊)此博客更加完善的讲述了带界面,类似QQ的服务端和客户端的交互!http://blog.csdn.net/qq_33624284/article/details/53581174
0 0
- java socket (-) 简单socket
- Java Socket
- java-socket
- java socket
- Java Socket
- JAVA Socket
- Java Socket
- socket(java)
- Java Socket
- Java socket
- java socket
- java socket
- Socket(java)
- Java socket
- Java Socket
- java socket
- Java Socket
- java socket
- Clientdataset 排序
- 风险无处不在:运行diagcollection.sh导致 os hang住
- mysql权限
- dubbo学习概要笔记
- 第十五周项目—字符串替换
- Java Socket
- 预加载和延迟加载(页面刷新为什么要用settimeout())
- Ubuntu安装Mysql-python
- Jersey 简单试用
- 微信小Demo一:环境搭建
- 线程笔记(一)
- centos7安装出现license information(license not accepted)解决办法
- 3.7 Swift数组的批量操作
- jquery去掉onclick事件