java基础 Java网络总结,
分享于 点击 1804 次 点评:288
java基础 Java网络总结,
1 网络通信的本质是进程间通信。2 Tcp协议和UDP协议
TCP:开销大,用于可靠性要求高的场合。
TCP的过程相当于打电话的过程
UDP:用在对实时性要求比较高的场合。
UDP的过程相当于写信的过程。
注意:socket是套接字,ip和port(端口号 0~65535个端口,一个端口只能有一个进程)
3, TCP通信机制,tcp是面向连接的,实现多线程的方法有三个
① 为每个客户分配一个工作线程。
② 创建一个线程池,由其中的工作线程来为客户服务。
③ 利用JDK的Java类库中现成的线程池,由它的工作线程来为客户服务。
下面以为每个客户分配一个工作线程来实现多线程
在服务端
import java.net.*;
import java.io.*;
public class TCPServer2 {
public static void main(String[]args) throws Exception{
ServerSocket ss=newServerSocket(9000);//端口号
while(true){
Socket s=ss.accept();//连接监听客户端
System.out.println(s.getInetAddress());
Thread t=newServerThread(s);//实现多线程连接
t.start();
}
}
}
class ServerThread extends Thread{//分配线程
Socket s;
public ServerThread(Socket s){
this.s=s;
}
public void run(){
try {
OutputStreamos=s.getOutputStream();//在网络中获取输出流
PrintWriter out=newPrintWriter(os);
for(int i=1;i<=30;i++){
out.println("Hello"+i);//通过网络发消息给客户端
out.flush();
Thread.sleep(1000);
}
} catch (Exception e) {
e.printStackTrace();
}
finally{
try {
s.close();//注意关闭线程而不关闭流
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
在客户端
import java.net.*;
import java.io.*;
public class TCPClient {
public static void main(String[]args) throws Exception{
Socket s=new Socket("192.168.0.10",9000);//连接服务端的ip和端口
InputStream is=s.getInputStream();//获得输入流,读取服务端发来的信息
InputStreamReader ir=newInputStreamReader(is);
BufferedReader in=newBufferedReader(ir);
for(int i=1;i<=30;i++){
System.out.println(in.readLine());
}
s.close();
}
}
4, Udp 面向无连接,不可靠,效率高,资源占用少 ,先从客户端发起通信,让服务端知道其地址等信息,不同的协议其端口号的含义也不一样
例子:
在客户端
import java.net.*;
public class UDPClient {
publicstatic void main(String[] args) throws Exception{
DatagramSocket ds=new DatagramSocket();注册邮箱
String text1="I am here!";
byte[] bs1=text1.getBytes();//转换成字节用来传输
DatagramPacket letter1=new DatagramPacket(
bs1,0,bs1.length,InetAddress.getLocalHost(),9000);
//写好信(地址和内容)
ds.send(letter1);//发信
DatagramPacket letter2=new DatagramPacket(
newbyte[100],0,100);
//准备空信用来接受服务端的信
ds.receive(letter2);//收信
byte[] data=letter2.getData();//得到信的内容
int offset=letter2.getOffset();
int length=letter2.getLength();
String str=newString(data,offset,length);//转换成字符串读取
System.out.println(str);
ds.close();
}
}
在服务端
import java.net.*;
public class UDPServer {
public static void main(String[] args) throws Exception{
DatagramSocket ds=new DatagramSocket(9000);//服务端口
while (true) {
byte[] bs1 = new byte[100];
DatagramPacket letter1 = newDatagramPacket(bs1, 0, bs1.length);//制作空信封用来收信
ds.receive(letter1);
InetAddress address =letter1.getAddress();
int port = letter1.getPort();
String str = "北京2008年举行奥运会";
byte[] bs2 = str.getBytes();
DatagramPacket letter2 = new DatagramPacket(bs2, 0, bs2.length,address,port);//获得客户端的ip和port然后将信息发给客户端
ds.send(letter2);
}
}
DatagramSocket,相当是邮箱有send(发消息)receive(收消息)
DatagramPacket,相当是信,里面有ip端口,信息内容
相关文章
- 暂无相关文章
用户点评