---------------------- 、、期待与您交流! ----------------------/*
网络编程分为两种模式:tcp和udp
连接互联网的计算机以亿计,为了唯一的标识出每台电脑,互联网就给每台电脑分配一个
唯一独立的ip地址,通过这个ip地址就可以进行计算机之间的数据交换
我们计算机交换的数据功能我们在java中把它封住成一个叫socket的类,
简称套接字,
端口号:计算机数据的交换一般都是电脑上的程序来维护的,而电脑上又运行着很多的
软件,为了唯一的标识这些程序,我们就用16位来表示它,叫做端口号
只要指定ip地址和端口号,那么任意计算机上的软件就能自由的通信
---------------------------------------------------------------------------
tcp简介:
tcp/ip协议是一种可靠的网络协议,它在通信两端各建立一个socket,从而在通信
两端之间形成网络虚拟链路,一旦建立了虚拟网络链路,两端程序就可以通过虚拟链路
通信,java使用socket对象代表两端的通讯端口,并通过socket来产生io流进行
数据的传输
端口有客服端和服务的的明显之分
客服端用socket 服务端用serversocket
socket构造函数(客户端)
socket(string s,int port)指定目标ip地址和端口号
socket(inetaddress in,int port)同上
方法:产生输入输出流:
inputstream getinputstream() 获得输入流
outputstream getoutputstream() 获得输出流
serversocket(服务端)
构造器:
serversocket(in port) 只需指定端口号
方法:
socket accept();等待客服端的请求 获得发送者的端口
注:当服务端接收到客服端的请求的时候,两者就会建立虚拟链路,于是就在两者间
维护了两条流:输入流和输出流
服务端的代码
------------------------------------------------------------------------------
*/
import java.io.*;
import java.net.*;
public class tcpserver
{
public static void main(string[]agrs)throws exception
//服务端端口
serversocket ss=new serversocket(45454);
//等待客服端的请求 并返回发送者的端口
socket s=ss.accept();
//从端口维护的输入流中一行行的读取数据
bufferedreader buf
=new bufferedreader(new inputstreamreader(s.getinputstream()));
string len=null;
while((len=buf.readline())!=null)
system.out.println(len);
}
//客服端的代码-----------------------------------------------------------------
public class tcpclient
public static void main(string[]args)throws exception
socket s=new socket("127.0.0.1",45454);
outputstream os=s.getoutputstream();
//这个是打印流 缓冲作用
printstream ps=new printstream(os);
//从键盘中源源不断的获得数据并一行行的放到端口间的输出流
bufferedreader br=
new bufferedreader(new inputstreamreader(system.in));
while((len=br.readline())!=null)
//如果输入88就停止通讯
if(len.equals("88"))
break;
ps.println(len);
os.close();
s.close();
//---------------------------------------------------------------------------
/*
udp简介:
udp是一种不可靠的网络通信协议,它在通信实例的两端各建立一个socket,
但这两个socket并没有虚拟链路,这两个socket只是负责发送和接收数据报对象,
java提供datagramsocket作为基于udp协议的socket,使用datagramsocket代表socket
完成接收和发送的任务
datagramsocker(int port)默认是绑定本机中的ip地址,并指定其端口号
send(datagrampacket e) 把指定数据报发送出去
receive(datagrampacket e) 接收数据报
datagrampacket:
datagrampacket(byte[]buf,int length)创建一个字节数据用来接收数据包中的数据
datagrampacket(byte[]buf,int length,inetaddress addr,int port)
把数据打包并指定发送的目的地
inetaddress getaddress():获得发送者的ip地址
int getport()获得发送者的端口号
socketaddress getsocketaddress()返回一个封住了ip和端口号的对象
---------------------------------------------------------------------------------
服务端代码:
public class udpserver
datagramsocket ds=new datagramsocket(38383);
//用于存储接收的字节数据
byte []b=new byte[20];
// 把数组创建成数据报的形式用于获取接收来的数据
datagrampacket dp=new datagrampacket(b,b.length);
while(true)
//相当于码头正在等待着货船的靠岸
ds.receive(dp);//如果没有接受到数据报当前线程将一这阻塞着
//解码
string s=new string(b,0,b.length);
//获取发送者的ip地址
inetaddress net=dp.getaddress();
//获取发送者的端口号
int port=dp.getport();
//打印在控制台
system.out.println(net.getname()+port+s);
//服务端代码-------------------------------------------------------------------------------
:
public class udpclient
//创建一个套接字
datagramsocket ds=new datagramsocket(37373);
//源源不断的从键盘中获得数据
bufferedreader bf=
datagrampacket dp=null;
//将数据一行行的打包成数据报发送到指定目的
while((len=bf.readline())!=null)
b=len.getbytes();
//注意这里的ip地址必须是inetaddress对象封装
dp=new datagrampacket(b,b.length,inetaddress.getlocalhost(),38383);
//把数据报发送出去
ds.send(dp);
//--------------------------------------------------------------------------------------
/*两者的简单比较如下:
tcp协议:可靠,传输大小没有限制,但建立的时候是需要时间的,差错控制开销大:例子:手机通讯
udp协议:不可靠、差错控制开销小,传输大小控制在64kb下,不需要建立时间,出来会快些
例子:呼机*/
----------------------、、期待与您交流!
----------------------