使用JAVA写的一个简易TCP通讯程序(一)
来源:互联网 发布:协同过滤算法的研究 编辑:程序博客网 时间:2024/05/29 07:59
好记性不如赖笔头…………
使用TCP测试通讯时,注意必须 先启动服务端,否则客户端会报错。因为TCP是需要三次握手的协议,如果服务器没有启动,握手失败,就会提示“连接异常”的错误
而UDP就没有这个问题,因为它是一种广播式的协议,在发送信息前,它不会去检查服务器有没有启动、存在不存在,它只是把消息发出去,好了,它的工作完成了,不管消息被 收到还是没有被收到。所以它才可以不用管启动顺序。
服务端代码:package com.ckinghan.tcpServer;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.net.InetAddress;import java.net.ServerSocket;import java.net.Socket;public class TCPServer { //指定接口 public int port; //构造方法 public TCPServer(int port) { super(); this.port = port; //创建线程并启动 Server server = new Server(); Thread thread = new Thread(server); thread.start(); } class Server implements Runnable{ @Override public void run() { //创建对象 ServerSocket serverSocket = null; Socket socket = null; BufferedReader reader =null; try { //实例化对象 serverSocket = new ServerSocket(port); //提示服务端启动 System.out.println("端口号为:"+port+"的服务启动成功……"); //监听并获取socket socket = serverSocket.accept(); //获取输入流 InputStream inputStream = socket.getInputStream(); //将字节流转换为字符流 reader = new BufferedReader(new InputStreamReader(inputStream)); //获取IP InetAddress inetAddress = serverSocket.getInetAddress(); //接收到的信息 String message = null; //一直循环获取消息 while (true) { //如果接收到的消息不为Null if((message = reader.readLine()) != null){ //如果接收到的消息为close或exit,则退出对话 if("close".equals(message.toLowerCase()) || "exit".equals(message.toLowerCase())){ System.out.println(inetAddress.getHostAddress()+" 的用户已退出会话"); break; } //输出会话的内容 System.out.println(inetAddress.getHostAddress()+" 的用户说:"+message); } } } catch (IOException e) { e.printStackTrace(); }finally { //关闭流 try { if(reader != null) reader.close(); if(socket != null) socket.close(); if(serverSocket != null) serverSocket.close(); } catch (IOException e) { e.printStackTrace(); } } } } public static void main(String[] args) { //启动服务端 new TCPServer(12000); }}
客户端代码:package com.ckinghan.tcpServer;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.net.Socket;import java.net.UnknownHostException;public class TCPClient { //连接的服务器IP private String ip; //连接服务器的端口 private int port; //构造 方法 public TCPClient(String ip,int port) { super(); this.ip = ip; this.port = port; //创建线程并启动 Client client = new Client(); Thread thread = new Thread(client); thread.start(); } class Client implements Runnable{ @Override public void run() { //创建对象 Socket socket = null; BufferedWriter bufferedWriter = null; BufferedReader bufferedReader = null; try { //实例化对象 socket = new Socket(ip, port); //获取socket的输出流,以便将内容发送给服务器 bufferedWriter = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); //从控制台接收内容 bufferedReader = new BufferedReader(new InputStreamReader(System.in)); //要发送的内容 String message = null; //一直循环 while (true) { //提示输入 System.out.print("我说:"); //如果用户要发送的信息不为null if((message = bufferedReader.readLine()) != null){ //换行 System.out.println(); //检查用户是否要退出 if("exit".equals(message.toLowerCase()) || "close".equals(message.toLowerCase())){ System.out.println("退出会话成功"); break; } //向服务器写入要发送的消息 bufferedWriter.write(message); //注意:这里是重点,换行 bufferedWriter.newLine(); //清空缓存将信息发送过去 bufferedWriter.flush(); } } } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { //关闭流 try { if(bufferedWriter != null) bufferedWriter.close(); if(bufferedReader != null) bufferedReader.close(); if(socket != null) socket.close(); } catch (IOException e) { e.printStackTrace(); } } } } public static void main(String[] args) { new TCPClient("127.0.0.1",12000); }}
阅读全文
0 0
- 使用JAVA写的一个简易TCP通讯程序(一)
- 使用JAVA写的一个简易通讯程序(一)
- 使用JAVA线程写的一个UDP简易通讯程序(三)
- 通过JAVA程序写一个简易的记事本
- JAVA模拟客户机与服务器实现简易的TCP通讯
- 一个用Java写的简单的TCP聊天程序
- 一个用Java写的简单的TCP聊天程序
- Java 简易通讯簿程序
- 使用TCP+winsock写的一个简单服务器程序
- 使用TCP+winsock写的一个简单客户端程序
- 使用nodejs写一个简易的爬虫
- 用java写的一个简易记事本
- 使用TCP+winsock写的一个简单服务器程序(转)
- 使用TCP+winsock写的一个简单客户端程序(转)
- 在用JAVA写一个简易CAD程序时的笔记
- java的TCP通讯
- 写一个java的网络数据包分析程序(一)
- 一个简易的Java爬虫程序
- html5第九课时,声明变量
- [leetcode]: 107. Binary Tree Level Order Traversal II
- android xml解析 XmlPullParser & XmlSerializer
- Android中给定一个日期判断是周几.
- cmath
- 使用JAVA写的一个简易TCP通讯程序(一)
- 5040655.html
- html5第九课时,number数据类型
- 应用系统性能测试六大步
- 有用的git指令
- delphi LPT1端口打印与开钱箱
- 13. Roman to Integer
- 在x64 OFFICE中使用ScriptControl控件的方法
- html5第九课时,js常用的输入输出方法