----------------------ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
网络编程
1.TCP和UDP
网络编程有两种实现方式:即通过TCP协议和UDP协议。
问:TCP和UDP有什么区别:
答:1)
2)
(1)UDP:
2.Socket
■Socket就是为网络服务提供的一种机制
■通信的两端都有Socket
■网络通信其实就是Socket间的通信
■数据字两个Socket间通过IO传输
1)UDP传输
●DatagramSocket与DatagramPacket
●建立发送端,接受端
●建立数据包
●调用Socket的发送接收方法
●关闭Socket
发送端与接收端是两个独立的运行程序。
根据上面的基本思路,我们就可以建立一个UDP基础服务
1.1)发送端
DatagramSocket ds=new DatagramSocket();
byte[] buf="UDP,have a try".getBytes();
DatagramPacket dp=new DatagramPacket(buf,buf.length,InetAddress.getByName("127.0.0.1"),10000);
ds.send(dp);
ds.close();
1.2)接收端
DatagramSocket ds=new DatagramSocket(10000);
byte[] buf=new byte[1024];
DatagramPacket dp=new
ds.receive();
String ip=dp.getAddress().getHostAddress();
int
String dps=new String(dp.getData(),0,dp.getLength());
System.out.println(ip);
System.out.println(port);
System.out.println(dps);
ds.close();
我们只需要对上面程序,小小改动一下,就能接发多次。同时我们要求多人交互,加上线程控制。
发送类
class Send implements Runnable
{
private DatagramSocket ds;
public Send(DatagramSocket ds)
{
this.ds=ds;
}
//实现run方法
public void run(){
try{
Scanner scan=new Scanner(System.in);
String line=null;
//循环发送,除非从控制台接收到"886",否则一直发送
while((line=buf.readLine())!=null)
{
if("886".equals(line))
break;
byte[] buf=line.getBytes();
DatagramPacket dp=new DatagramPacket(buf,buf.length,InetAddress.getByName("127.0.0.1"),10000);
ds.send(dp);
}
}catch(IOException e)
{e.printStackTrace();}
ds.close();
}
接收类
class Rece implements Runnable
{
private DatagramSocket ds;
public Rece(DatagramSocket ds)
{ this.ds=ds;
}
public void run()
{
try
{
while(true)
{
byte[] buf=new byte[1024];
DatagramPacket dp=new DatagramPacket(buf,buf.length);
ds.receive(dp);
String ip=dp.getHostAdress().getHostName();
int port=dp.getPort();
System.out.println(ip+":"+dp.getData(0,dp.getLength());
}
主程序
class ChassDemo
{
public static void main(String[] args) throws IOException
{
DatagramSocket sendSocket=new DatagramSocket();
DatagramSocket receiveSocket=new DatagramSocket(10000);
new Thread(new Rece(receiveSocket)).start();
new Thread(new Send(sendSocket)).start();
}
2)TCP传输
TCP传输有2个对象,客户端是Socket,服务端是ServerSocket,同样的,我们也可以建立TCP服务
客户端
a.创建客户端的socket服务
Socket s=new
b.为了发送数据,应该获取socket流中的输出流,为了接受输入,应该获取socket的输入流
c.关闭资源
服务端
a.创建服务端的ServerSocket服务
ServerSocket ss=new ServerSocket(10000);
b.通过accept方法后去连接过来的客户端对象
Socket s=ss.accept();
c.获取客户端的数据
InputStream in=s.getInputStream();
byte[] buf=new byte[1024];
int len=in.read(buf);
String ip=s.getInetAdress().getHostName();
System.out.println(ip+""+new String(buf,0,len);
d.关闭客户端
s.close()
通过对上面的代码进行小小改变,也能实现TCP的多次交互,加上多线程,就能多人聊天了
---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------