李sir_Blog

博客园 首页 联系 订阅 管理

Socket 通信

 1.UDP实现  (DatagramSocket)

【客户端】

//首先创建一个DatagramSocket对象

DatagramSocket socket = new DatagramSocket(4567);

//创建一个InetAddress

InetAddress serverAddress = InetAddress.getByName("192.168.1.104");

String str = "hello";  

//这是要传输的数据 byte data [] = str.getBytes();

 //把传输内容分解成字节

//创建一个DatagramPacket对象,并指定要讲这个数据包发送到网络当中的哪个、地址,以及端口号

DatagramPacket packet = new DatagramPacket(data,data.length,serverAddress,4567);

//调用socket对象的send方法,发送数据

socket.send(packet);

【服务器端】

//创建一个DatagramSocket对象,并指定监听的端口号                

DatagramSocket socket = new DatagramSocket(4567);    

 byte data [] = new byte[1024];                

//创建一个空的DatagramPacket对象                

DatagramPacket packet = new DatagramPacket(data,data.length);                

//使用receive方法接收客户端所发送的数据,                

//如果客户端没有发送数据,该进程就停滞在这里                

socket.receive(packet);                

String result = new String(packet.getData(),packet.getOffset(),packet.getLength());

2.TCP通信

【客户端】

创建一Socket对象并指明服务器端的IP及端口号

Socket socket = new Socket("192.168.1.0",45678);

//向服务器发送消息

PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);

out.println(message);

//从服务器接收消息

BufferedReader is = new BufferedReader(new InputStreamReader(socket.getInputStream()));

String rString = is.readLine().toString();

【服务器端】

//创建一个ServerSocket对象,并让这个Socket在45678端口监听

serverSocket = new ServerSocket(45678);

//调用ServerSocket的accept()方法,接受客户端所发送的请求,

//如果客户端没有发送数据,那么该线程就停滞不继续                

Socket socket = serverSocket.accept();                

//从Socket当中得到InputStream对象                

InputStream inputStream = socket.getInputStream();                

byte buffer [] = new byte[1024*4];                

int temp = 0;                

//从InputStream当中读取客户端所发送的数据                

while((temp = inputStream.read(buffer)) != -1) {

                   String str = new String(buffer,0,temp);

  //接下来可以对从客户端接收到的消息做处理                

}

  

 

【Socket获取客户端IP地址及端口号】

   Socket类包含一些非常有用的属性,这些属性允许确定关于正在连接的客户端的信息。其中关键信息之一    是返回EndPoint对象的RemoteEndPoint属性。

EndPoint类本身是抽象的,要想收集有用的信息,需·要把    EndPoint强制类型转换为IPEndPoint对象。

IPEndPoint类包含远程客户端的IP地址和端口号。具体用法如下:    

TcpListener tcpl=new TcpListener(port);    

Socket s=tcpl.AcceptSocket();    

label1.text=((IPEndPoint)s.RemoteEndPoint).Address.ToString();

 label2.text=((IPEndPoint)s.RemoteEndPoint).Port.ToString();

posted on 2015-12-10 11:19  李sir  阅读(276)  评论(0编辑  收藏  举报