当前位置:首页 > 开发 > 编程语言 > 网络编程 > 正文

Socket与ServerSocket的通信

发表于: 2014-08-05   作者:肆无忌惮_   来源:转载   浏览:
摘要: 一、连接首先,在服务器中创建ServerSocket对象ss,对象ss调用accept方法的时候,可以得到一个Socket对象.ServerSocket ss = new ServerSocket(613);// 不要使用80等其他程序常用端口,这里任选一个端口613Socket st = ss.accept();这是一个阻塞方法,如果accept不到一个客户端,他就一直会在这里等待客户端的连接,


一、连接
首先,在服务器中创建ServerSocket对象ss,对象ss调用accept方法的时候,可以得到一个Socket对象.
ServerSocket ss = new ServerSocket(613);// 不要使用80等其他程序常用端口,这里任选一个端口613
Socket st = ss.accept();
这是一个阻塞方法,如果accept不到一个客户端,他就一直会在这里等待客户端的连接,直到有一个客户端连上来才执行结束。
如果需要连接多个客户端,可以写while循环来执行ss.accept();

在客户端可以这样对其进行连接.
Socket st = new Socket("127.0.0.1", 613);// 服务器在本地,这里填写本地IP的字符串,后面加上端口.

到了这里,服务器和客户端就已经连接好了.

public class Server {

	public static void main(String[] args) {
		// 套接字,指定端口
		try {
			ServerSocket ss = new ServerSocket(613);// 不要使用80等其他程序常用端口
			System.out.println("服务器已启动,等待连接。。。");
			while (true) {
				// 必须等到有客户端连上,该方法才能执行完毕(阻塞方法)。接收到一个客户端对象
				Socket st = ss.accept();

				DealThread dt = new DealThread(st);
				dt.start();

			}
		} catch (BindException e) {
			System.out.println("端口使用中,关闭服务器程序重新开始");
			System.exit(0);
		} catch (IOException ioe) {
			ioe.printStackTrace();
		}
	}
}


public class DealThread extends Thread {

	boolean bConnected = true;
	OutputStream os;
	InputStream is;

	public DealThread(Socket st) {
		try {
			this.is = st.getInputStream();
			this.os = st.getOutputStream();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public void run() {
		while (bConnected) {

                }
        }
}

 

 

客户端:

public void connectServer() {
		try {
			st = new Socket("127.0.0.1", 613);

			is = st.getInputStream();
			os = st.getOutputStream();
                 }
}

 
二、通信

通信即数据传输。
通过Socket对象,可以得到输入输出流。在这里需要注意的是,在服务端程序中用st.getInputStream()是得到了一个服务端的输入流,也就是这个流是用来读取客户端发过来的消息的,将客户端的消息读到服务器.同理,st.getOutputStream()就是将服务器的消息写到客户端去.

在客户端这边,同样用这个st.getInputStream();这是后得到的InputStream是从服务器读取数据到客户端的.

我们得到了这个流之后,可以将其包装成我们需要的流.对其进行write,read操作.即可实现客户端与服务端的通信.

三、一般的写法
当客户端连接到了服务器,服务器需要单独启动一个线程对客户端的消息进行处理,这个线程用来接受客户端的消息并将其进行处理(可能需要转发给其他客户端)

而客户端这边也需要单独开启一个线程来接受消息。

四、常用方法:
获得客户端IP地址
st.getRemoteSocketAddress();
获得客户端名字:
st.getInetAddress().getHostName();

 

Socket与ServerSocket的通信

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

推荐文章
编辑推荐
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号