网络通信总结(2)

阅读更多

1.Java中客服端的创建

1.语法格式:

 

java.net.Socket client = new java.net.Socket(String ip,int port);
	//其中参数ip为服务器的IP地址,port为服务器端口号。

 

然后是得到client的输入输出流对象。因为客户端读入数据时会出现阻塞,所以我们要将它放到一个独立的线程中去处理。

2.通信流程的重要性

在和同学的讨论过程中发现,通信流程很重要。程序有时候会出现这么一个问题,客户机在等待服务器发送来的消息,而服务器也在等待客户机发送来的消息。这个时候二者都阻塞而不能往下执行,导致程序就卡在这个地方。服务器和客户端发送消息的先后顺序一定要事先设计好,并按设计好的规则去实现。

基础通信中有一个简单的例子:服务器验证客户端请求的合法性

服务器发送消息给客户要求客户端发送用户名,只有当服务器接收到客户端发来的用户名,服务器才会再次发送消息,要求客户端发送用户密码。这就是自己设计的通信流程,因为没有按照这个流程来实现代码,所以程序才不能达到自己的预计。


3.字符串乱码问题

在网络通信学习过程中,客户端和服务器间进行数据传输时,如果传送的消息是英文,一般不会出现乱码,但是当我们发送的消息中含有中文字符时,就会出现乱码。为什么会出现乱码呢?

由于地域文化等因素的差异,会出现不同的字符集。而计算机处理的都是二进制为0和1,所以我们将字符与计算机中的二进制码一一对应起来,这种对应关系就是字符编码。为了满足不同的需要,就制定了不同的字符集编码标准。字符在保存时的编码格式如果和要显示的编码格式不一样的话,就可能会出现乱码问题。

例如使用GBK字符集编码的字符串,在输出显示时使用的是UTF-8字符集,那么就会出现乱码。

在java中解决字符乱码的方法如下:

String str = "netjava培训";
	byte[] data = str.getBytes("UTF-8");//表示将字符串str转换成字节数组时,使用的是UTF-8字符集编码方式
	byte[] data = str.getBytes("GBK");//表示将字符串str转换成字节数组时,使用的是GBK字符集编码方式,GBK是中文繁简编码字符集。
 

经过测试,使用以上两种编码方式得到的字节数组data的长度不一样,可见使用不用的字符集编码得到的二进制位是不同的。

以上是将字符串编码为字节数组,下面介绍将字节数组按照指定的字符集解析为字符串:

String s = new String(byte bytes[], String charsetName);
 

String(byte bytes[], String charsetName)是String类中的一个构造函数,是将一个byte数组,按照指定的字符集解析成一个字符串。

通过上面的介绍,我们要解决字符乱码问题的方法,就是将字符编码和解析选用的字符集一致。

你可能感兴趣的:(网络通信总结(2))