网络通信基础——从cmd到界面通信的实现

电脑只有在网络的基础上才能给人们的生活带来巨大的便利,网络能够实现数据共享、通信聊天等多种功能,这篇博客将带你初窥通信的世界。
每台电脑都有ip地址,你可以在你的cmd中输入Ipconfig来了解你自己的ip地址。[img]http://dl2.iteye.com/upload/attachment/0087/0293/24df18d5-6667-3bc3-acf9-d42c580e51ca.png[/img]
你可能会疑惑要了解ip地址干什么,别着急,下面将为你讲述。
最基本的网络通信通过cmd来实现,而ip地址则是必须的,除了ip地址,还有一个端口号。每一台机器都有从0~65535个端口号,其中的每一个数字,可供一个程序通信用,在cmd中输入ip地址,空格之后再输入端口号,
[img]http://dl2.iteye.com/upload/attachment/0087/0301/a63db600-6d16-3c1b-bdd1-3e894f93da64.png[/img]
按下回车之后,如果出现的是一个全黑的窗口,那就表明你已经通过那个端口号成功的连上了那台电脑。但是由于服务器上的web服务与客户端通信使用的是http协议,而我们随便发的消息服务器是不能理解的,所以服务器返回了错误说明,我们所要做的就是通过java语言编写一个网络通信程序。
public class Main {
public static void main(String args[]){
Main mn=new Main();
mn.showUI();
}
public void showUI(){
//服务器对象
while(true){
ServerSocket ss;
try {
ss = new ServerSocket(9999);//接入端口
Socket sk=ss.accept();//进入等待状态
//服务器输入输出流
InputStream ins=sk.getInputStream();
java.io.OutputStream ous=sk.getOutputStream();
String s="hello";
ous.write(s.getBytes());//发送数据
int t=ins.read();//读取
//循环结束
while(t!=13){
System.out.print((char)t);
t=ins.read();
}
String bye="byebye";
ous.write(bye.getBytes());
sk.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}

这就是一个最简单的网络通信程序,运行之后我们就能通过cmd来实现网络通信。
网络通信说起来无非就是信息的来回传递,无论是服务器还是客户端,都讲究一个信息的接收和发送,这就用到了输入输出流,为了信息的持续传输,我们必须要制定一个规则,比如这个程序中,只要服务器没有接收到客户端传输到的回车键的ASCII码,他就不会停止接收客户端的数据。还有一点要注意的是,检验错误的try语句不要忘记写了。
说到这,我们就要讲一下网络通信的界面化了,毕竟没有人愿意一直对着一个漆黑的窗口打字,这也是为什么计算机从原来的dos界面发展到现在如此人性化的地步。为了讲解方便,我先把我做的几个界面给大家看一下,不喜勿喷
[img]http://dl2.iteye.com/upload/attachment/0087/0313/17f150ee-3a83-30d3-b0ab-71ddab67fa84.png[/img]

[img]http://dl2.iteye.com/upload/attachment/0087/0315/c7a6c0c6-3410-3d73-9879-295d1f6b2e1b.png[/img]

[img]http://dl2.iteye.com/upload/attachment/0087/0317/8aac9439-e9e0-3799-9440-142566b6fa8e.png[/img]
如果要实现基本的聊天的话,其实三个界面就够了,什么按钮、文本框什么的我就不在此赘述了,服务器的通信代码其实也差不多,如果要说区别的话也就是用监听器实现界面与程序的连接,客户端的话因为要通过登陆界面实现ip地址的输入与端口的接入,可能会有些不同,但其实也就
				Socket sk=new Socket(Enter.jt1.getText(),i);//Enter.jt1.getText()为ip地址,i为端口号
一句代码的事。
好了,服务器与客户端已经成功接驳,接下来就是实现信息的传递了,同样的,还是要通过输入输出流,因为输出可以不像输入流一样需要持续等待,所以我把输入输出流分开来写了,通过“发送”按钮的监听实现信息的发送,通过线程来实现信息的接收
if("发送".equals(st)){//按下“发送”按钮
try {
ous.write(s2.getBytes());//输出文本框的内容
ous.flush();//强制发送
j2.setText(null);//将下面的文本框清空
j1.append(s2);//将上面的文本框写上输入的内容
} catch (IOException e1) {
e1.printStackTrace();
}
}
这是发送的代码
public void run(){
processSocket();
}
private void processSocket(){
try{
java.io.InputStream ins=sk.getInputStream();
//将输入流封装为课读取一行字符串,也就是以\r\n结尾的字符串
BufferedReader brd=new BufferedReader(new InputStreamReader(ins));
String s1=brd.readLine();//一行一行的读取客户机发来的信息
while(!"bye".equals(s1)&&s1!=null){
System.out.println("服务器收到的是:"+s1);
//j1.setText("收到了");
j1.append(s1+"\r\n");
s1=brd.readLine();
}
sk.close();
}catch(Exception ef){
ef.printStackTrace();
}
}
这是接收的代码
如果要实现聊天室样式的群聊功能,我们就要将客户端当成一个个线程,服务器是他们的中心,信息通过客户端发送,以服务器为中转站,再发送给全部客户端。
网络通信其实不止聊天一种,文件等信息的传输也是网络通信的一种,这也是我们接下来想要探索的世界。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值