您的位置:首页 > 理论基础 > 计算机网络

java 网络流 TCP/UDP

2016-03-21 17:19 465 查看

一、ServerSocket

java.lang.Object

  |-java.net.ServerSocket


有子类SSLServerSocket。

此类实现服务器套接字。服务器套接字等待请求通过网络传入。它基于该请求执行某些操作,然后可能向请求者返回结果。
常用构造方法:

ServerSocket(int port)  创建绑定到特定端口的服务器套接字


常用方法:

Socket accept()   侦听并接受到此套接字的连接

void bind( SocketAddress endpoint) 将ServerSocket绑定到特定地址(IP地址和端号)

void close() 关闭套接字

InetAddress  getInetAddress() 返回此服务器套接字的本地地址

int getLocalPort() 返回此套接字在其上侦听的端口


二、Socket

Java.lang.Object

|-java.net.Socket


常用构造方法:

Socket(InetAddress address, int port)   创建一个流套接字并将其连接到指定 IP 地址的指定端口号。

Socket(String host, int port)   创建一个流套接字并将其连接到指定主机上的指定端口号。


常用方法:

void  bind(SocketAddress bindpoint)   将套接字绑定到本地地址
void close() 关闭此套接字
void connect(SocketAddress endpoint)   将此套接字连接到服务器。 void  connect(SocketAddress endpoint, int timeout)   将此套接字连接到服务器,并指定一个超时值

InetAddress getInetAddress() 返回套接字连接的地址。
InputStream getInputStream()   返回此套接字的输入流。
OutputStream getOutputStream()  返回此套接字的输出流。
int getPort()  返回此套接字连接到的远程端口。
void shutdownInput()   此套接字的输入流置于“流的末尾”。
void shutdownOutput()     禁用此套接字的输出流。


三、DatagramSocket

Java.lang.Object

|-java.net.DatagramSocket


常用构造方法:

DatagramSocket(int port)
创建数据报套接字并将其绑定到本地主机上的指定端口。

DatagramSocket(int port, InetAddress laddr)
创建数据报套接字,将其绑定到指定的本地地址。

常用方法:

应当注意的是,该类既能发送数据包也能接受数据包

void

bind(SocketAddress addr)
将此 DatagramSocket 绑定到特定的地址和端口。

void

close()
关闭此数据报套接字。

void

connect(InetAddress address, int port)
将套接字连接到此套接字的远程地址。

void

connect(SocketAddress addr)
将此套接字连接到远程套接字地址(IP 地址 + 端口号)。

InetAddress

getInetAddress()
返回此套接字连接的地址。

void

receive(DatagramPacket p)
从此套接字接收数据报包。

void

send(DatagramPacket p)
从此套接字发送数据报包。

四、DatagramPacket

Java.lang.Object

|-java.net.DatagramPacket

常用构造方法:

构造方法摘要

, int)]DatagramPacket(byte[] buf, int length)
构造 DatagramPacket,用来接收长度为 length 的数据包。

, int, java.net.InetAddress, int)]DatagramPacket(byte[] buf, int length, InetAddress address, int port)
构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号。

, int, java.net.SocketAddress)]DatagramPacket(byte[] buf, int length, SocketAddress address)
构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号。

常用方法:

InetAddress

getAddress()
返回某台机器的 IP 地址,此数据报将要发往该机器或者是从该机器接收到的。

int

getPort()
返回某台远程主机的端口号,此数据报将要发往该主机或者是从该主机接收到的。

void

setAddress(InetAddress iaddr)
设置要将此数据报发往的那台机器的 IP 地址。

void

, int, int)]setData(byte[] buf, int offset, int length)

void

setPort(int iport)
设置要将此数据报发往的远程主机上的端口号。

void

setSocketAddress(SocketAddress address)
设置要将此数据报发往的远程主机的 SocketAddress(通常为 IP 地址 + 端口号)。

五、简单TCP应用实例:

一 服务端小写转大写服务

服务端程序:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.HashSet;
/**
* 此程序模拟服务器处理单个用户的线程接入和数据转发。
* @author kuangdaoyizhimei
*
*/
public class ClientHandle implements Runnable {
private Socket socket;
private HashSet<String>list;
public ClientHandle(Socket socket, HashSet<String> list) {
this.socket=socket;
this.list=list;
}

@Override
public void run() {
System.out.println("这是服务器处理单线程窗口:(核心窗口)");
try
{
list.add(socket.getInetAddress().getHostAddress());
InputStream is=socket.getInputStream();
BufferedReader br=new BufferedReader(new InputStreamReader(is));
String ip=socket.getInetAddress().getHostAddress();
int port=socket.getPort();
String str=ip+":"+port+" :";
String temp=null;
while((temp=br.readLine())!=null)
{
for(String s:list)
{
Socket sk=new Socket(s,8000);
OutputStream osm=sk.getOutputStream();
PrintWriter pw=new PrintWriter(osm,true);
pw.println(str+temp);
sk.close();
}
}
}
catch(IOException e)
{
System.out.println("用户"+socket.getInetAddress().getHostAddress()+"退出!");
}
}
}


View Code

运行结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: