端口是一种抽象的软件结构。应用程序通过系统调用与某端口建立连接(binding)后,传输层传给该端口的数据都被相应的进程所接收,相应进程发给传输层的数据都通过该端口输出。
端口用一个整数型标识符来表示,即端口号。端口号跟协议相关,TCP/IP传输层的两个协议TCP和UDP是完全独立的两个软件模块,因此各自的端口号也相互独立,端口通常称为协议端口(protocol port) ,简称端口。
端口使用一个16位的数字来表示,它的范围是 0~65535,1024以下的端口号保留给预定义的服务。例如:http使用80端口,ftp使
用21
1.建立服务器的Socket连接
2.从Socket上得到inputstream封装成InputStreamReader
3.封装成BufferedReader读取
Eg:
服务器端:
调用ServerSocket(intport)创建一个服务器端套接字,并绑定到指定端口上;
调用accept(),监听连接请求,如果客户端请求连接,则接受连接,返回通信套接字。
调用Socket类的getOutputStream()和getInputStream获取输出流和输入流,开始网络数据的发送和接收。
最后关闭通信套接字。
Server:
publicstaticvoid main(String[] args) throws Exception {
ServerSocket client = new ServerSocket(9999);//1.服务器建立端口号为9999的监听
Socket socket = client.accept();//获取与客户端链接的套接字
InputStream in =socket.getInputStream();//从套接字中获取字节输入流
BufferedReader br = new BufferedReader(new InputStreamReader(in));
System.out.println(br.readLine());
}
Client:
publicstaticvoid main(String[] args) throws Exception {
Socket socket = new Socket("127.0.0.1",9999);//2.客户端建立与服务器链接
OutputStream out =socket.getOutputStream();//获取字节输出流
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(out));//封装到BufferedWriter
bw.write("ni hao \r\n");//发送消息
bw.flush();
bw.close();
}
Swing
取得屏幕大小
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
去掉多余的空隙,让组件更加紧密
frame.pack();
窗口的关闭
mf.setVisible(false);
mf.dispose();
事件:
Event 用户对界面操作在java语言上的描述,以类的形式出现,例如键盘操作对应的事件类是KeyEvent。
Event Source -事件源,通常就是各个组件,例如按钮Button。
Event handler-事件处理者,接收事件对象并对其进行处理的对象
布局方式:
BorderLayout:边界布局
BorderLayout 是Window,Frame和Dialog的缺省布局管理器
BorderLayout布局管理器把容器分成5个区域:North,South,East,West和Center,每个区域只能放置一个组件.
FlowLayout:流式布局
FlowLayout是Panel,Applet的缺省布局管理器
组件的放置规律是从上到下、从左到右进行放置,如果容器足够宽,第一个组件先添加到容器中第一行的最左边,后续的组件依次添加到上一个组件的右边,如果当前行已放置不下该组件,则放置到下一行的最左边
GridLayout:网格布局
GridLayout使容器中各个组件呈网格状布局,平均占据容器的空间
CardLayout:卡片布局
把容器分成许多层,每层的显示空间占据整个容器的大小,但是每层只允许放置一个组件,当然每层都可以利用Panel来实现复杂的用户界面
Panel
Panel与Frame类似,可以添加到Frame中。当把Panel 作为一个组件添加到某个容器中后,该Panel 仍然可以有自己的布局管理器。因此,可以利用Panel 使得BorderLayout 中某个区域显示.多个组件,达到设计复杂用户界面的目的。
小程序:
applet
init();//一次
start();//多次
stop();//多次
destroy();//一次