【Java】SingleTalkClient代码理解与学习笔记
2017-03-15 20:19
393 查看
本次学习聊天器的客户端代码,有了上一次的基础,这一次的学习会变得很快。
下面是完整代码:
import java.io.*;
import java.net.*;
public class SingleTalkClient {
public static void main(String[] args) throws IOException
{
Socket client = null;
PrintWriter out = null;
BufferedReader in = null;
try {
client = new Socket("127.0.0.1", 4444);
out = new PrintWriter(client.getOutputStream(), true); //auto flush
in = new BufferedReader(new InputStreamReader(client.getInputStream()));
} catch (UnknownHostException e) {
System.err.println("Don't know about host: 127.0.0.1.");
System.exit(1);
} catch (IOException e) {
System.err.println("Couldn't get I/O for the connection to: 127.0.0.1.");
System.exit(1);
}
//从标准输入流(键盘)中获取信息
BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
String fromServer, fromUser;
boolean sbye = false;
boolean ubye = false;
System.out.print("Client input:");
fromUser = stdIn.readLine();
while( true )
{
if( ubye == false )
{
out.println(fromUser);
out.flush();
//System.out.println("Client: " + fromUser);
if (fromUser.equals("Bye."))
ubye = true;
}
if( sbye == false )
{
fromServer = in.readLine();
System.out.println("from Server: " + fromServer);
if (fromServer.equals("Bye."))
sbye = true;
}
if( ubye == false )
{
System.out.print("Client input:");
fromUser = stdIn.readLine();
}
if( ubye == true && sbye == true )
break;
}
out.close();
in.close();
stdIn.close();
client.close();
}
}
代码一开始声明了Socket、PrintWriter和BufferedReader的对象。
用给定的IP:127.0.0.1以及4444端口来对client进行初始化。
接着是抛出异常:1. 找不到指定IP;2. 无法连接到指定IP。
下面的从标准输入流获取信息的代码和服务器端的完全一样,故不赘述。
接下来就是代码的实际执行阶段:
首先运行服务器端,若运行成功,则不会有任何显式结果来提示;若服务器连接失败,则控制台会弹出跟异常有关的信息,这时候你就要来检查自己机器上的4444端口是否被占用,有关端口的知识在其他大牛的博客上都有介绍,本篇便不再解释。
下面来运行你的客户端,若运行成功,则控制台会显示输入提示符:
在“:”后面输入字符串,按回车键发送。如果服务器端接收成功,则控制台会弹出“Accept OK!”
最后简单使用一下该聊天器:
在双端都输入“Bye.”之后,程序结束。
下面是完整代码:
import java.io.*;
import java.net.*;
public class SingleTalkClient {
public static void main(String[] args) throws IOException
{
Socket client = null;
PrintWriter out = null;
BufferedReader in = null;
try {
client = new Socket("127.0.0.1", 4444);
out = new PrintWriter(client.getOutputStream(), true); //auto flush
in = new BufferedReader(new InputStreamReader(client.getInputStream()));
} catch (UnknownHostException e) {
System.err.println("Don't know about host: 127.0.0.1.");
System.exit(1);
} catch (IOException e) {
System.err.println("Couldn't get I/O for the connection to: 127.0.0.1.");
System.exit(1);
}
//从标准输入流(键盘)中获取信息
BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
String fromServer, fromUser;
boolean sbye = false;
boolean ubye = false;
System.out.print("Client input:");
fromUser = stdIn.readLine();
while( true )
{
if( ubye == false )
{
out.println(fromUser);
out.flush();
//System.out.println("Client: " + fromUser);
if (fromUser.equals("Bye."))
ubye = true;
}
if( sbye == false )
{
fromServer = in.readLine();
System.out.println("from Server: " + fromServer);
if (fromServer.equals("Bye."))
sbye = true;
}
if( ubye == false )
{
System.out.print("Client input:");
fromUser = stdIn.readLine();
}
if( ubye == true && sbye == true )
break;
}
out.close();
in.close();
stdIn.close();
client.close();
}
}
代码一开始声明了Socket、PrintWriter和BufferedReader的对象。
用给定的IP:127.0.0.1以及4444端口来对client进行初始化。
接着是抛出异常:1. 找不到指定IP;2. 无法连接到指定IP。
下面的从标准输入流获取信息的代码和服务器端的完全一样,故不赘述。
接下来就是代码的实际执行阶段:
首先运行服务器端,若运行成功,则不会有任何显式结果来提示;若服务器连接失败,则控制台会弹出跟异常有关的信息,这时候你就要来检查自己机器上的4444端口是否被占用,有关端口的知识在其他大牛的博客上都有介绍,本篇便不再解释。
下面来运行你的客户端,若运行成功,则控制台会显示输入提示符:
在“:”后面输入字符串,按回车键发送。如果服务器端接收成功,则控制台会弹出“Accept OK!”
最后简单使用一下该聊天器:
在双端都输入“Bye.”之后,程序结束。
相关文章推荐
- 【Java】SingleTalkServer代码理解与学习笔记
- [学习笔记]Java代码构建一个线程池的自己学习写的实例,用这个你会更好的理解文章内容
- Java IO学习笔记+代码(3)
- JVM学习笔记(二)------Java代码编译和执行的整个过程
- JNI学习笔记4——本地代码创建Java对象(包括javaString)
- Java学习笔记——伪代码及程序控制
- Java IO学习笔记+代码(3)
- java学习笔记十——堆和栈的理解
- [Java学习笔记] 对象的比较(引用比较、值比较) ^_^个人的理解,请多多关照^_^
- java nio mina 学习笔记1 Simple Server and Client
- Java IO学习笔记+代码(1)
- 设计模式学习笔记以及java代码实现
- Java学习笔记——伪代码及程序控制
- Java IO学习笔记+代码(1)
- DELPHI调用JAVA代码学习笔记1
- Java学习笔记之语言基础――Java代码安全的概念
- (Java2D 学习笔记系列) (一)一个简单的图像填充实例及其分析理解
- JNI学习笔记:(1)开篇(2)本地代码访问Java代码 (3)本地方法取得Java属性/调用java方法 (4)本地代码创建Java对象(包括javaString) (5) 本地方法处理java数组
- Java IO学习笔记+代码
- [Java学习笔记] 容易被忽略的代码