java socket send_java socket编程

TcpServer

Server端所要做的事情主要是建立一个通信的端点,然后等待客户端发送的请求。典型的处理步骤如下:

1. 构建一个ServerSocket实例,指定本地的端口。这个socket就是用来监听指定端口的连接请求的。

2. 调用socket的accept()方法来获得下面客户端的连接请求。通过accept()方法返回的socket实例,建立了一个和客户端的新连接。

3.通过这个返回的socket实例获取InputStream和OutputStream,可以通过这两个stream来分别读和写数据。

4.结束的时候调用socket实例的close()方法关闭socket连接。

packagesocket;importjava.io.IOException;importjava.io.InputStreamReader;importjava.io.Reader;importjava.net.ServerSocket;importjava.net.Socket;public classServer {public static void main(String args[]) throwsIOException {//为了简单起见,所有的异常信息都往外抛

int port = 8899;//定义一个ServerSocket监听在端口8899上

ServerSocket server = newServerSocket(port);//server尝试接收其他Socket的连接请求,server的accept方法是阻塞式的

Socket socket =server.accept();//跟客户端建立好连接之后,我们就可以获取socket的InputStream,并从中读取客户端发过来的信息了。

Reader reader = newInputStreamReader(socket.getInputStream());char chars[] = new char[64];intlen;

StringBuilder sb= newStringBuilder();while ((len=reader.read(chars)) != -1) {

sb.append(new String(chars, 0, len));

}

System.out.println("from client: " +sb);

reader.close();

socket.close();

server.close();

}

}

TcpClient端

客户端的请求过程稍微有点不一样:

1.构建Socket实例,通过指定的远程服务器地址和端口来建立连接。

2.通过Socket实例包含的InputStream和OutputStream来进行数据的读写。

3.操作结束后调用socket实例的close方法,关闭。

packagesocket;importjava.io.OutputStreamWriter;importjava.io.Writer;importjava.net.Socket;public classClient {public static void main(String args[]) throwsException {//为了简单起见,所有的异常都直接往外抛

String host = "10.21.23.144"; //要连接的服务端IP地址

int port = 8899; //要连接的服务端对应的监听端口//与服务端建立连接

Socket client = newSocket(host, port);//建立连接后就可以往服务端写数据了

Writer writer = newOutputStreamWriter(client.getOutputStream());

writer.write("Hello mynona Server.");

writer.flush();//写完后要记得flush

writer.close();

client.close();

}

}

Udp:

server端

因为UDP协议不需要建立连接,它的过程如下:

1. 构造DatagramSocket实例,指定本地端口。

2. 通过DatagramSocket实例的receive方法接收DatagramPacket.DatagramPacket中间就包含了通信的内容。

3. 通过DatagramSocket的send和receive方法来收和发DatagramPacket.

packageUdp2;importjava.net.DatagramPacket;importjava.net.DatagramSocket;importjava.net.InetAddress;public classUDPServer {public static void main(String args[]) throwsException

{//监听9876端口

DatagramSocket serverSocket = new DatagramSocket(9876);byte[] receiveData = new byte[1024];byte[] sendData = new byte[1024];while(true)

{//构造数据包接收数据

DatagramPacket receivePacket = newDatagramPacket(receiveData, receiveData.length);//接收数据

serverSocket.receive(receivePacket);//解析数据

String sentence = newString( receivePacket.getData());

System.out.println("RECEIVED: " +sentence);

InetAddress IPAddress=receivePacket.getAddress();int port =receivePacket.getPort();

String capitalizedSentence=sentence.toUpperCase();

sendData=capitalizedSentence.getBytes();//构造发送数据包发送数据

DatagramPacket sendPacket = newDatagramPacket(sendData, sendData.length, IPAddress, port);

serverSocket.send(sendPacket);

}

}

}

UdpClient:

1. 构造DatagramSocket实例。

2.通过DatagramSocket实例的send和receive方法发送DatagramPacket报文。

3.结束后,调用DatagramSocket的close方法关闭。

packageUdp2;importjava.io.BufferedReader;importjava.io.InputStreamReader;importjava.net.DatagramPacket;importjava.net.DatagramSocket;importjava.net.InetAddress;public classUDPClient {public static void main(String args[]) throwsException

{

BufferedReader inFromUser=

new BufferedReader(newInputStreamReader(System.in));

DatagramSocket clientSocket= newDatagramSocket();

InetAddress IPAddress= InetAddress.getByName("localhost");

System.out.println("IPAddress:" +IPAddress);byte[] sendData = new byte[1024];byte[] receiveData = new byte[1024];

String sentence=inFromUser.readLine();

sendData=sentence.getBytes();//发送数据

DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, 9876);

clientSocket.send(sendPacket);//接收数据

DatagramPacket receivePacket = newDatagramPacket(receiveData, receiveData.length);

clientSocket.receive(receivePacket);

String modifiedSentence= newString(receivePacket.getData());

System.out.println("FROM SERVER:" +modifiedSentence);

clientSocket.close();

}

}

参考来源:http://shmilyaw-hotmail-com.iteye.com/blog/1556187

http://haohaoxuexi.iteye.com/blog/1979837

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值