网络通信(Server和Client)
2017-06-10 21:57
393 查看
1. OSI结构
OSI模型 数据单位 | 协议 |
---|---|
应用层 | 应用软件 |
表示层 | 解析 |
会话层 | 建立通道 |
传输层 | 段 传输和端口号 |
网络层 | 数据包(路由器) |
链路层 | 帧 (frame交换机) mac地址的(解)封装 |
物理层 | 比特(bit,网线) 物理设备,1 0比特流 |
2. UDP : 不可靠,,,
具体可以参考
http://blog.csdn.net/libaineu2004/article/details/39829889
2.Tcp Socket通信
Socket:套接字是基于tcp协议的标识一个网络地址 www.baidu.com
主机名 ::www.c
3.控制台流获取方式
控制台输入流 : 字符流=字节流 [+码表 +缓存]InputStream in2 = System.in; // 字节流 InputStreamReader isr = new InputStreamReader(in2); BufferedReader br = new BufferedReader(isr);
4.客户端与服务器通信
客户端(四步)
有一个socket:最好是指定ip,端口获取到输出流
写数据
关流 关socket就可以了!
服务端代码
public class Server { public static void main(String[] args) { String strRead; String strwrite; ServerSocket serverSocket = null; Socket socket = null; try { serverSocket = new ServerSocket(9090); socket = serverSocket.accept(); System.out.println("有人来了"); // 读取控制台 InputStream in2 = System.in; // 字节流 InputStreamReader isr = new InputStreamReader(in2);// 字节流转字符流 BufferedReader br = new BufferedReader(isr); InputStream inputStream = socket.getInputStream();// 输入流 OutputStream outputStream = socket.getOutputStream();// j输出流 while (true) { 4000 // 读 byte[] b = new byte[1024]; int length = inputStream.read(b);// s strRead = new String(b, 0, length); System.out.println(strRead); if ("Bye".equals(strRead)) { break; } // 写 String str = br.readLine(); outputStream.write(str.getBytes()); if ("Bye".equals(str)) { break; } } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { try { socket.close(); serverSocket.close(); System.out.println("serverSocket.close();"); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
客户端代码
public class Client { public static void main(String[] args) { String strRead = ""; Socket socket = null; try { InputStream in2 = System.in; // 字节流 InputStreamReader isr = new InputStreamReader(in2);// 字节流转字符流 BufferedReader br = new BufferedReader(isr); socket = new Socket("localhost", 9090); InputStream inputStream = socket.getInputStream();// 输入流 OutputStream outputStream = socket.getOutputStream();// j输出流 // String content = "你好啊,我是客户端,你是"; // outputStream.write(content.getBytes()); // 读数据 while (true) { // 写 String str = br.readLine(); outputStream.write(str.getBytes()); if ("Bye".equals(str)) { break; } // 读 byte[] b = new byte[1024]; int length = inputStream.read(b);// s strRead = new String(b, 0, length); System.out.println(strRead); if ("Bye".equals(strRead)) { break; } } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { try { socket.close(); System.out.println("socket.close();"); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
服务器(四步)
serversocket开始接受客户端(干活)
已经有socket1,拿到输入流
关闭:先关闭所有socket然后关闭serversoc public class Servepublic static
}
多个客户端与服务器通信
注意端口占用问题
服务端代码public class Server { public static void main(String[] args) { System.out.println("服务器开启!"); try { ServerSocket serverSocket = new ServerSocket(9090); while (true) { Socket socket = serverSocket.accept();// ServerThread serverThread = new ServerThread(socket); } } catch (Exception e) { // TODO: handle exception } } }
public class ServerThread implements Runnable { Socket socket; ServerSocket serverSocket = null; /** 生成流 **/ InputStream inputStream = null;// 输入流 OutputStream outputStream = null;// 输出流 // 读取控制台 InputStream in2 = System.in;// 字节流 InputStreamReader isr = new InputStreamReader(in2);// 字节流转字符流 BufferedReader br = new BufferedReader(isr); /** 客户端交互 **/ String receive = ""; String send = ""; public ServerThread(Socket socket) { this.socket = socket; try { outputStream = socket.getOutputStream();// 输出流 inputStream = socket.getInputStream();// 输入流 new Thread(this).start(); while (true) { send = br.readLine(); outputStream.write(send.getBytes()); if ("bye".equals(receive)) { break; } } } catch (Exception e) { // TODO: handle exception } } public void run() { while (true) { // 读客户端的消息:等!!! byte[] b = new byte[1024]; int length; try { length = inputStream.read(b); receive = new String(b, 0, length); System.out.println("receive:" + receive); if ("bye".equals(receive)) { break; } System.out.println("请回复客户端:"); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } // 等!!! } } }
客户端代码:
public class Client { public static void main(String[] args) { Socket socket = null; try { socket = new Socket("localhost", 9090); ClientThread clientThread = new ClientThread(socket); } catch (Exception e) { // TODO: handle exception } } }
public class ClientThread implements Runnable { Socket socket; // ServerSocket serverSocket = null; /** 生成流 **/ InputStream inputStream = null;// 输入流 OutputStream outputStream = null;// j输出流 // 读取控制台 InputStream in2 = System.in;// 字节流 InputStreamReader isr = new InputStreamReader(in2);// 字节流转字符流 BufferedReader br = new BufferedReader(isr); /** 客户端交互 **/ String receive = ""; String send = ""; public ClientThread(Socket socket) { this.socket = socket; try { outputStream = socket.getOutputStream();// j输出流 inputStream = socket.getInputStream();// 输入流 new Thread(this).start(); while (true) { send = br.readLine(); outputStream.write(send.getBytes()); if ("bye".equals(receive)) { break; } } } catch (Exception e) { // TODO: handle exception } } public void run() { while (true) { // 读客户端的消息:等!!! byte[] b = new byte[1024]; int length; try { length = inputStream.read(b); receive = new String(b, 0, length); System.out.println("receive:" + receive); if ("bye".equals(receive)) { break; } System.out.println("请回复客户端:"); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } // 等!!! } } }
相关文章推荐
- 从零开始写Go网络通信框架(1)——基本的Socket Client/Server的编写
- iOS 中client和server的 Web Service 网络通信 (1)
- 网络代理服务Agent,服务端.client 连接server 进行通信
- 网络通信之server/client通信的实现
- 网络通信之server/client通信的实现
- Qt网络通信骨架解析,QtClient QtServer QtSerialPort
- 01 NIO网络通信框架 Netty server和client的api
- 上机题目(0基础)- Java网络操作-Socket实现client和server端通信二(Java)
- iOS 中client和server的 Web Service 网络通信 (2)
- 一个linux UDP网络通讯的例子源代码(server、client方式)
- Android HttpClient网络通信
- Android HttpClient网络通信
- C#网络编程.2.套接字.TcpListener.TcpClient.服务端客户端通信
- select()网络通信之client
- server 和client通信(asp.net和Javascript)
- Android HttpClient网络通信
- mysql client与server端的通信协议
- 最简单client和server通信程序
- 网络编程之TCP通信,为什么在Serve端为每个Client端开辟一个单独的线程来处理Client的请求
- C#网络编程.2.套接字.TcpListener.TcpClient.服务端客户端通信