---------------------- ASP.Net+Unity开发、 .Net培训、期待与您交流! ----------------------
网络通讯要素:Ip地址:(InetAddress)网络中设备的标示。本地回环地址127.0.0.1 主机名:localhost
端口号:用于标示进程的逻辑地址,不同进程的标识。有效端口0-65535 0-1024系统使用或保留端口传输协议:通讯规则 tcp Udp
udp:将数据及源和目的封装成数据包中,不需要建立连接,每个数据包的大小限制在64K内,因无连接,是不可靠协议,不需要建立连接,速度快。
tcp:建立连接,形成传输数据通道,在连接中进行大数据量传输,通过三次握手建立连接,是可靠协议。必须建立连接,效率低。
Socket:Socket就是网络服务提供的一种机制。通信两端都有Socket。网络通信其实就是Socket间的通信。数据在两个Socket间通过IO传输。
Udp传输:DatagramSocket与DatagramPacket 建立发送端和接收端,建立数据包,调用Socket的发送接收方法。关闭Socket。
Tcp传输:Socket和ServerSocket 建立客户端和服务端 建立连接后,通过Socket中的IO流进行数据传输。关闭Socket。
因为Tcp是面向连接的。所以建立Socket服务时,就要有服务端存在,并连接成功。形成通路后,在此传输数据。
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
/*
*编写一个聊天程序。有接受数据,有发送数据。
*两部分同时执行,使用多线程技术。一个控制发,一个控制收。
*
* */
class Send implements Runnable{//创建Send方法实现Runnable接口。
private DatagramSocket ds;
public Send(DatagramSocket ds){
this.ds=ds;
}
public void run(){//覆写run方法。
try{
BufferedReader bufr =new BufferedReader(new InputStreamReader(System.in));//键盘接收数据。
String line=null;
while((line=bufr.readLine())!=null){
if("886".equals(line))
break;
byte[] buf=new byte[1023];
//将数据封装到数据包。
DatagramPacket dp=new DatagramPacket(buf,buf.length,InetAddress.getByName("127.0.0.1"),10005);
ds.send(dp);
}
}
catch ( Exception e){//处理异常。
throw new RuntimeException("发生失败");
}
}
}
class Rece implements Runnable{//实现接收方法,实现Runnable 接口。
private DatagramSocket ds;
public Rece(DatagramSocket ds){
this.ds=ds;
}
public void run(){
try{
while(true){// 循环接收数据
byte[] buf=new byte[1023];
DatagramPacket dp=new DatagramPacket(buf,buf.length);//封装到数据包
ds.receive(dp);
String ip =dp.getAddress().getHostAddress();
String data=new String(dp.getData(),0,dp.getLength());
System.out.println(ip+"::"+data);
}
}
catch ( Exception e){
throw new RuntimeException("接收失败");
}
}
}
public class ChatDemo {
public static void main(String [] args) throws SocketException{
DatagramSocket sendSocket=new DatagramSocket();//建立socket服务。
DatagramSocket receSocket=new DatagramSocket(10005);
new Thread(new Send(sendSocket)).start();//建立线程。
new Thread(new Rece(receSocket)).start();
}
}
---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------
详细请查看:http://edu.csdn.net