网络编程基础知识
2011-05-01 10:52
411 查看
TCP/IP协议,,IP地址,4个字节表示;IPV4
127.0.0.1回路IP,不经过网卡的特殊IP地址。
PORT端口号,一个占用两个字节的整数,用于表示数据包该交给哪个网络程序。同样也要指定接受哪个端口号上的数据。
一台计算机上不允许有两个相同端口号得应用程序。
范围在0-65535之间,0-1023之间的端口是用于知名的网络服务和应用。我们编写要用1024以上的··以免冲突。
TCP,,,传输控制协议,面向连接的通信协议。需要建立连接。就像电话
UDP,,,用户数据报协议,是无连接通信协议。不保证数据的可靠传输。
数据帧格式
协议类型--源IP--目标IP--源端口--目标端口--帧序号--帧数据
TCP一问一答的方式。。UDP不会等待,直接不停的发送。
Socket 网络驱动层是提供给应用程序编程的接口和一种机制
通过一种绑定机制与驱动程序建立关系。告诉对应的IP和PORT 接受方同理;
java.net包中
DatagramSocket 类对应udp通信
ServerSocket 类用于TCP通信的服务器端 创建于客户端连接的
Socket 类用于TCP通信的服务器和客户端 这里的服务器是用于向客户端传输数据的
如果没有创建端口号,会自动选择一个没有被使用的。
如果没有指定IP地址,驱动会随机指定计算机上的一个IP;
对于只有一个IP地址的计算机,一般不用指定IP地址
udp网络程序
DatagramSocket类 发送数据时最好用无参构造,如果有可能接受数据选择带端口号参数的构造函数,如果有多个IP地址选择带端口号和IP的构造函数,,,close方法调用后,此端口号就可以被驱动分配给别的应用程序。
send(DatagramPacket p )发送数据报方法 receive(DatagramPacket p)接受数据报方法
DatagramPacket数据容器 接受数据时的构造函数, 发送数据时的构造函数
getInetAddress()和getPort()接受数据可以获取发送方IP和PORT,,,getData和getLength方法获取实际接受数据和数据长度。
InetAddress 用于表示IP地址的类 getByName放回此类得示例。getHostAddress放回此对象当中用点分割的地址
TCP服务器端要想于多个客户端程序进行连接就要循环调用serversocket的accept方法。。。
每一个服务器创建的与某个客户端之间的连接之间不能互相干扰,应该放在单独的线程当中运行。
一个服务器端对象于一个单独的线程相关联,来独立完成于客户端的会话过程。
解决TCP服务器程序端口号冲突问题: 使用netstat -n 查询正在使用中的端口号。
通过配置信息来指定程序端口号。用户可以通过修改配置文件来指定程序指定的端口
通过指定参数编写客户端机代码,将服务器IP和端口号作为参数。可以使程序更加灵活。。
ASP和JSP是用于编写网站内容的,并不是网络编程!!!!
访问网络资源:
URL统一资源定位符 URL编码规则空格将转换为+号,,普通数字和字母正常显示,特殊符号将用%打头加上它的十六进制表现形式。
java中提供了URLEncoder类和URLDecoder类来实现URL的编码和解码。。。
HTTP请求消息,,请求行,,消息头,,空格,,(实体)一般是表单提交的值
HTTP响应消息,,状态行,,消息头,,空格,,实体,网页内容。
HTTP消息头字段,
Connection,,,,默认为Keep-Alive,返回消息保持连接,,,close返回消息关闭连接。
Accept-Lanuage,,,,指定客户端所期望返回消息的国家语言,可以指定多个,以逗号分隔
Range :bytes = 100-588 显示指定位置内容,单位为字节100>= <=588
bytes = 100- 100后所有
bytes = -100 最后100
Content-Range : bytes 1234-5678/10000
127.0.0.1回路IP,不经过网卡的特殊IP地址。
PORT端口号,一个占用两个字节的整数,用于表示数据包该交给哪个网络程序。同样也要指定接受哪个端口号上的数据。
一台计算机上不允许有两个相同端口号得应用程序。
范围在0-65535之间,0-1023之间的端口是用于知名的网络服务和应用。我们编写要用1024以上的··以免冲突。
TCP,,,传输控制协议,面向连接的通信协议。需要建立连接。就像电话
UDP,,,用户数据报协议,是无连接通信协议。不保证数据的可靠传输。
数据帧格式
协议类型--源IP--目标IP--源端口--目标端口--帧序号--帧数据
TCP一问一答的方式。。UDP不会等待,直接不停的发送。
Socket 网络驱动层是提供给应用程序编程的接口和一种机制
通过一种绑定机制与驱动程序建立关系。告诉对应的IP和PORT 接受方同理;
java.net包中
DatagramSocket 类对应udp通信
ServerSocket 类用于TCP通信的服务器端 创建于客户端连接的
Socket 类用于TCP通信的服务器和客户端 这里的服务器是用于向客户端传输数据的
如果没有创建端口号,会自动选择一个没有被使用的。
如果没有指定IP地址,驱动会随机指定计算机上的一个IP;
对于只有一个IP地址的计算机,一般不用指定IP地址
udp网络程序
DatagramSocket类 发送数据时最好用无参构造,如果有可能接受数据选择带端口号参数的构造函数,如果有多个IP地址选择带端口号和IP的构造函数,,,close方法调用后,此端口号就可以被驱动分配给别的应用程序。
send(DatagramPacket p )发送数据报方法 receive(DatagramPacket p)接受数据报方法
DatagramPacket数据容器 接受数据时的构造函数, 发送数据时的构造函数
getInetAddress()和getPort()接受数据可以获取发送方IP和PORT,,,getData和getLength方法获取实际接受数据和数据长度。
InetAddress 用于表示IP地址的类 getByName放回此类得示例。getHostAddress放回此对象当中用点分割的地址
package socketTest; import java.io.InputStream; import java.io.OutputStream; import java.net.Socket; /** * socket客户端机 */ public class TcpClient { public static void main(String[] args) { try { Socket s= new Socket("192.168.1.101",8001); InputStream ips = s.getInputStream(); OutputStream ops = s.getOutputStream(); byte[] bur = new byte[1024]; int len = ips.read(bur); System.out.println(new String(bur,0,len)); ops.write("建立连接成功啦!!".getBytes()); ops.close(); ips.close(); s.close(); } catch (Exception e) { e.printStackTrace(); } } } package socketTest; import java.io.*; import java.net.*; /** * socket服务器端 */ public class TcpTest { public static void main(String[] args) { try { ServerSocket ss = new ServerSocket(8001); Socket s = ss.accept(); InputStream ips = s.getInputStream(); OutputStream ops = s.getOutputStream(); ops.write("welcome to My House!!陈亮宇".getBytes()); byte[] bur = new byte[1024]; int len = ips.read(bur); System.out.println(new String(bur,0,len)); ops.close(); ips.close(); s.close(); ss.close(); } catch (IOException e) { e.printStackTrace(); } } } /** *一台服务器,多台客户端机进行对话! */ import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.Socket; public class Servicer implements Runnable { private Socket s ; public Servicer(Socket s){ this.s = s; } @Override public void run() { try{ BufferedReader bf = new BufferedReader( new InputStreamReader( s.getInputStream())); PrintWriter pw = new PrintWriter( new OutputStreamWriter( s.getOutputStream()),true); while(true) { String msg = bf.readLine(); System.out.println(msg); if(msg.equalsIgnoreCase("exit")) break; StringBuffer sb = new StringBuffer(msg).reverse(); pw.println(msg+"-------->"+sb.toString()); } pw.close(); bf.close(); s.close(); }catch(Exception ex){ ex.printStackTrace(); } } } import java.io.*; import java.net.*; public class TcpTest { public static void main(String[] args) { try { ServerSocket ss = new ServerSocket(8001); boolean isRunning = true; while(isRunning){ Socket s = ss.accept(); Servicer svr = new Servicer(s); new Thread(svr).start(); } } catch (IOException e) { e.printStackTrace(); } } } import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.Socket; import java.util.Scanner; public class TcpClient { public static void main(String[] args) { Socket s = null; BufferedReader br =null; PrintWriter pw =null; try { s= new Socket("192.168.1.101",8001); br = new BufferedReader( new InputStreamReader(s.getInputStream())); pw = new PrintWriter(new OutputStreamWriter( s.getOutputStream()),true); while(true){ Scanner input = new Scanner(System.in); pw.println(input.nextLine()); System.out.println(br.readLine()); } } catch (Exception e) { e.printStackTrace(); }finally{ try{ pw.close(); br.close(); s.close(); }catch(Exception e) { e.printStackTrace(); } } } }
TCP服务器端要想于多个客户端程序进行连接就要循环调用serversocket的accept方法。。。
每一个服务器创建的与某个客户端之间的连接之间不能互相干扰,应该放在单独的线程当中运行。
一个服务器端对象于一个单独的线程相关联,来独立完成于客户端的会话过程。
解决TCP服务器程序端口号冲突问题: 使用netstat -n 查询正在使用中的端口号。
通过配置信息来指定程序端口号。用户可以通过修改配置文件来指定程序指定的端口
通过指定参数编写客户端机代码,将服务器IP和端口号作为参数。可以使程序更加灵活。。
ASP和JSP是用于编写网站内容的,并不是网络编程!!!!
访问网络资源:
URL统一资源定位符 URL编码规则空格将转换为+号,,普通数字和字母正常显示,特殊符号将用%打头加上它的十六进制表现形式。
java中提供了URLEncoder类和URLDecoder类来实现URL的编码和解码。。。
HTTP请求消息,,请求行,,消息头,,空格,,(实体)一般是表单提交的值
HTTP响应消息,,状态行,,消息头,,空格,,实体,网页内容。
HTTP消息头字段,
Connection,,,,默认为Keep-Alive,返回消息保持连接,,,close返回消息关闭连接。
Accept-Lanuage,,,,指定客户端所期望返回消息的国家语言,可以指定多个,以逗号分隔
Range :bytes = 100-588 显示指定位置内容,单位为字节100>= <=588
bytes = 100- 100后所有
bytes = -100 最后100
Content-Range : bytes 1234-5678/10000
相关文章推荐
- 网络编程之基础知识
- 网络编程基础知识(简略)
- Java基础知识_毕向东_Java基础视频教程笔记(22-25 GUI 网络编程 正则)
- 黑马程序员-Java基础知识预备之Java网络编程
- Java基础知识-网络编程
- HTML---网络编程基础知识(2)
- Java基础知识强化之网络编程笔记01:InetAddress类的概述和使用
- 网络编程基础知识2.0
- Android基础知识(五)之网络编程
- windows网络编程之重叠模型(OVERLAPPED I/O)基础知识
- Linux网络编程——网络基础知识
- Java---网络编程-C/S-B/S基础知识
- JAVA基础知识之网络编程——-关于阻塞IO/非阻塞IO/同步IO/异步IO的一些参考文章
- Java网络编程一:基础知识详解
- 【JavaSE】网络编程 基础知识
- Java网络编程:基础知识
- Java基础知识强化之网络编程笔记10:TCP之客户端读取文本文件服务器控制台输出
- 知识储备--.NET网络编程基础
- Java基础知识强化之网络编程笔记16:Android网络通信之 使用Http的Get方式读取网络数据(基于HTTP通信技术)