想要实现网上聊天,就必须先了解网络通信。像平时我们遵守的法制法规,网络通信也有网络协议。网络协议是计算机在网络中实现通信时必须遵守的约定,也就是通信协议。主要是对信息传输的速率、传输代码、代码结构、传输控制步骤、出错控制等作出规定并制定出标准。只有相同网络协议的计算机才能进行信息的沟通与交流。
最常见而且应用最广的协议,应该就是TCP/IP了。它同时具备了可扩展性和可靠性的需求,只是牺牲了速度和效率。想要聊天,就要先知道双方的IP地址,然后按照协议互相传输信息。再引入一个套接字的概念吧,他是支持TCP/IP的网络通信的基本操作单元,简单的说就是通信的两方的一种约定,用套接字中的相关函数来完成通信过程。
ServerSocket ss=new ServerSocket(port);
System.out.println("成功监听端口"+port);
//调用接收方法,等待他人进行访问;返回一个socket
Socket socket=ss.accept();
System.out.println("访问成功");
这里就是创建服务器的套接字,可以理解成你给自己服务器端口开了一扇门,然后安排了一个人接待他人的访问。
接下来就是获得信息的输入输出流,实现信息的双向传输。
//获得端口的输入输出流
InputStream input=socket.getInputStream();
OutputStream output=socket.getOutputStream();
String str="吃饭了吗";
output.write(str.getBytes("GBK"));
while(true)
{
// int n=input.read();
// System.out.println((char)n);
String mst=ReadStr(input);
System.out.println(mst);
}
因为我们聊天主要是通过汉字,所以这里要弄一个读取字符串的方法
//读取字符串的方法
public String ReadStr(InputStream input) throws IOException
{
/*ByteArrayOutputStream类是在创建它的实例时,程序内部创建一个byte型别数组
的缓冲区,然后利用ByteArrayOutputStream和ByteArrayInputStream的实例
向数组中写入或读出byte型数据。在网络传输中可以利用ByteArrayOutputStream把
所有的变量收集到一起,然后一次性把数据发送出去。*/
ByteArrayOutputStream bos=new ByteArrayOutputStream();
while(true)
{
int n=input.read();
//判断当按下回车键时,停止向bos中存入字节。
if(n=='\r')
{
continue;
}
if(n=='\n')
{
break;
}
bos.write(n);
}
//创建一个字节数组,将之前程序内部创建的字节型数组缓存区所存的字节统统移给新数组
byte[]bytes=bos.toByteArray();
//创建字符串变量,把所有字节合在一起
String str=new String(bytes,"GBK");
return str;
}
最后,在搜索中输入cmd,然后输入telnet +端口号,就能实现和其他计算机之间的简单聊天了,不过只能在黑框框里面,感觉还是木有意思呀,所以接下来就是要弄一个聊天窗口等其他事情了。