网络编程

OSI参考模型

应用层
表示层
会话层
传输层
网络层
数据链路层
物理层

TCP/IP参考模型

应用层
传输层
网际层
主机至网络层

【网络通讯要素:】
IP地址:
网络中设备的标识;
不易记忆,可用主机名;
本地回环地址:127.0.0.1 主机名 localhost。
端口号:
用于标识进程的逻辑地址,不同进程的标识;
有效端口:0-65535;其中0-1024系统使用或者保留端口。
常见的端口:Mysql 3306
传输协议:
通讯的规则;
常见的协议:TCP UDP。

【UDP和TCP 】

UDP
将数据及源和目的封装成数据包中,不需要建立连接。
每个数据报的大小限制在64K内。
因无连接,是不可靠协议。
不需要建立连接,速度快。
TCP
建立连接,形成传输数据的通道。
在连接中进行大数据量传输。
通过三次握手完成连接,是可靠协议。
必须建立连接,效率会稍低。

【socket】
socket就是为网络服务提供的一种机制。
通信的两端都有Socket。
网络通信就是Socket间的通信。
数据在两个Socket间通过IO传输。

【UDP发送流程】

1.建立udpsocket服务。
2.提供数据,并将数据封装到数据包中。
3.通过socket服务的发送功能,将数据包发出去。
4.关闭资源。

【TCP传输】
Socket和ServerSocket
1,tcp分客户端和服务端。
2,客户端对应的对象是Socket。
服务端对应的对象是ServerSocket。

客户端,
通过查阅socket对象,发现在该对象建立时,就可以去连接指定主机。
因为tcp是面向连接的。所以在建立socket服务时,
就要有服务端存在,并连接成功。形成通路后,在该通道进行数据的传输。


同样,客户端与服务器端是两个独立的应用程序。

shutdownOutput();

附一个代码:实现和电脑宠物对话(宠物有记忆学习功能)



import java.net.*;
import java.io.*;
import java.util.*;
import java.text.*;


class  TCPClient3
{
	public static void main(String[] args) throws Exception 
	{
		Socket s=new Socket("asus-PC",10005);

		BufferedReader bufr=
			new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bufOut=
			new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
		BufferedReader bufIn=
			new BufferedReader(new InputStreamReader(s.getInputStream()));
		String line=null;
		SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd  hh:mm:ss");
		String time=null;
		String hr="---------------------------------------------\n";
		System.out.println("我和小宠物的对话:");
		while ((line=bufr.readLine())!=null)
		{
			if("over".equals(line))
				break;
			bufOut.write(line);
			bufOut.newLine();
			bufOut.flush();
			String str=bufIn.readLine();
			time=sdf.format(new Date(System.currentTimeMillis()));
			System.out.println("靳晶影的小宠物:\t"+time+"\n\t"+str);
			System.out.println(hr);
			System.out.println("【我】:");
		}

		bufr.close();
		s.close();


	}
}
class  TCPServer3
{
	public static void main(String[] args) throws Exception 
	{
		ServerSocket ss=new ServerSocket(10005); 
		Socket s=ss.accept();

		String ip=s.getInetAddress().getHostAddress();
		System.out.println(ip+"\n【主人】在叫我了,好高兴!");
		BufferedReader bufIn=
			new BufferedReader(new InputStreamReader(s.getInputStream()));
		BufferedWriter bufOut =
			new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
		SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd  hh:mm:ss");
		Properties prop=new Properties();
		File f=new File("dog_009");
		if(!(f.exists()))
			f.createNewFile();	
		FileInputStream fis=new FileInputStream("dog_009.ini");

		prop.load(fis);

		String line=null;
		String time=null;
		String hr="---------------------------------------------\n";
		while ((line=bufIn.readLine())!=null)
		{
			time=sdf.format(new Date(System.currentTimeMillis()));
			System.out.println("【主人】:\t"+time+"\n\t"+line);
			String ans=prop.getProperty(line);
			String anss="主人,我现在还很小,你不要怪我!!!木啊\t\t下面请主人告诉我你刚才问的问题我该怎么回答呢??";
			if (ans!=null)
			{
				System.out.println("【我的回答】:\t"+ans);
				bufOut.write(ans);
			}else{
				System.out.println("【我的回答】:\t"+anss);
				bufOut.write(anss);
			}
			
			bufOut.newLine();
			bufOut.flush();
			if (ans==null)
			{
				System.out.println(hr);
				String line2=bufIn.readLine();
				System.out.println("【主人】在"+time+"教我学习了如何回答:\n\t{"+line+"}");
				prop.setProperty(line,line2);
				FileOutputStream fos=new FileOutputStream("dog_009.ini");
				prop.store(fos,"于"+time+"学习了新知识");
				fos.close();
				bufOut.write("谢谢主人,我又学了新知识,好高兴啊,主人最漂亮最好了!!");
				bufOut.newLine();
				bufOut.flush();
			}
			System.out.println(hr);
		}

		fis.close();
		s.close();
		ss.close();
		

	}
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值