`

java tcp socket实例

阅读更多
网络编程的基本模型就是客户端到服务器端模型,一段必须提供一个固定位置,而另一端只需要知道这个固定的位置,并去建立两者之间的联系

Socket有两种主要操作方式:面向连接和无连接的。面向连接就像一部电话,必须先建立一个连接和一个呼叫,所有的事情到达的顺序和他们出发顺序相同,这就是tcp协议的实现场景
无连接的socket像一个邮件投递,没有什么保证,多个邮件可能在到达时的顺序域出发时的顺序不一样。无连接使用数据报协议,一个数据报包含了所有这次投递的信息,把它想象成信封,有目的地址和要发送的内容,这个模式下的socket不需要连接一个目的地,只是简单的投出数据报,这就是UDP协议的实现场景


下面是一个tcp socket实例程序

客户端:
package socket;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;

public class MyClient {

	public static void main(String[] args) {
        MyClient c = new MyClient();
        try {
			c.callServer();
		} catch (UnknownHostException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
        
	}
	private void callServer() throws UnknownHostException, IOException {

		int reqInt = 23;
		Socket s = new Socket("localhost",8888);  //客户端给出IP和端口号
		
		InputStream is = s.getInputStream();
		OutputStream os = s.getOutputStream();
		DataInputStream dis = new DataInputStream(is);
		DataOutputStream dos = new DataOutputStream(os);
		
		dos.writeInt(reqInt);
		dos.flush();
		int serverInt = dis.readInt();
		System.out.println("server answer "+reqInt+"*18 = "+serverInt);
		dis.close();
		dos.close();
		
	}

}

服务器端;
package socket;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class MyServer {

	public MyServer(){
		
	}
	public static void main(String[] args){
		MyServer ms = new MyServer();
			try {
				ms.listen(8888);
			} catch (IOException e) {
				e.printStackTrace();
			}
	}
	private void listen(int port) throws IOException {

		ServerSocket server = new ServerSocket(port);
		Socket socket = server.accept();
		InputStream is = socket.getInputStream();
		OutputStream os = socket.getOutputStream();
		DataInputStream dis = new DataInputStream(is);
		DataOutputStream dos = new DataOutputStream(os);
		int receiveInt = dis.readInt(); //读取客户端请求
		System.out.println("The message from client is:"+receiveInt);
		dos.writeInt(receiveInt*18); //返回client端
		dos.flush();   //强制清空缓冲区
		dos.close();
		dis.close();
		is.close();
		os.close();
		
		
	}
}

命令行中执行结果如下:
先启动服务器端没有任何反应


再启动客户端,向服务器端发送请求,并在客户端显示服务器端的响应


服务器端接收请求后


注意:一次请求完成后就结束自己的生命周期,服务器只能处理一次客户端请求,请求结束,连接即释放,看下一篇tcp socket实例(改进)
  • 大小: 8.3 KB
  • 大小: 12.9 KB
  • 大小: 8.9 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics