Java通信简单介绍以及使用

前言:好久没有更新博客了,前不久刚学了Java通信机制,现在就来简单介绍一下如何利用Java的通信机制搭建本地服务器,从而一步步建立属于自己的网络聊天室,笔者本人最近在写我自己网络聊天室的客户端,服务器端我已经写好了,而本篇博客正是要介绍如何搭建服务器端。好了话不多说,进入正题!

本篇博客分以下部分:

1.如何搭建本地服务器;

2.如何获取并向客户端发送消息;

3.如何连接搭建好的服务器。

建议先去看我上篇博客关于TCP/IP通信协议的介绍。

一、搭建本地服务器:

你绝对不可能想得到有多简单,一句代码即可完成。

Java提供了serverSocket类,这个就是我们通信的主角啦!那么先来创建一个服务器:

ServerSocket socket = new ServerSocket(int port),port是电脑的端口号,从0-1024到端口不允许使用,这是系统留给自己的,如果我们使用可能当系统需要使用的时候就会冲突。一般给2000-9999都是ok的。现在只是创建了这个服务器,还没有启动它呢。等我们设置完服务器然后编译运行就会自动启动服务器啦。现在呢先让我们的服务器进入等待状态,也是一句代码的事:

Socket cnn = socket.accept();emmm到这里服务器就算搭建好了!

二、获取客户端向服务器放松的消息并向客户端发消息:

因为还没有客户端,暂时借用windows的小黑框挡一下客户端吧。读取或者写入数据需要用到Java提供的InputSream和OutputStream类,也就是我们常说的IO文件流。这是必然的,从InputStream中获取客户端向服务器发送的信息,利用OutputStream提供的write方法,即可实现服务器向客户端发送信息。这也就实现了客户端--->服务器--->客户端这样收发消息的过程。详细代码在博客底部。

三、如何连接服务器:

1.首先呢获得你机子的ip地址,因为我们搭建的是本地服务器,连接的是机子上咱们之前定义好的端口。

2.输入指令:telnet +ip地址+端口号 回车后即可连接搭建好的服务器(不想打ip地址的话,可以将ip地址替换localhost)。

3.输入信息后按回车即可向服务器发送信息,服务器接受后会发送回来给用户(自己写的一个测试功能,证明服务器确实收到了我们发送的消息)。发送回来的消息将会显示在小黑框上面。

由于笔者呢用的MacBook,telnet貌似在os新版本中取消掉了,目前还没有配置好。但代码是Windows下写好的。以下附运行截图:

成功连接!

输入内容测试:

完整代码如下:

package com.version1.Chet1006;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.List;

public class Server {
	
	private ServerSocket serverSocket;
	private Socket conn;
	List<Socket>list;
	
	public void talk(int port)
	{
	
			try {
				serverSocket = new ServerSocket(port);
				
				while(true)
				{
					Socket conn = serverSocket.accept();//让服务器进入等待状态
					Handler handler = new Handler(conn);
					Thread t = new Thread(handler);
					t.start();
				}
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}//创建服务器
			
	}
	public static void main(String[] argv)
	{
		Server sever = new Server();
		sever.talk(9060);
		
	}
}
package com.version1.Chet1006;

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;

public class Handler implements Runnable{

	Socket socket;
	public Handler(Socket socket)
	{
		this.socket = socket;
	}
	@Override
	public void run() {
		
		//获取IO流
		try {
			
			InputStream in = socket.getInputStream();
		//    BufferedReader reader =  new BufferedReader(new InputStreamReader(in));	
			OutputStream out = socket.getOutputStream();
			out.write("Welcome into Net Chet Rom!\r\n".getBytes());

		while(true)
		{
			BufferedReader reader =  new BufferedReader(new InputStreamReader(in));		
			String msg = reader.readLine();
			System.out.println("msg:"+msg);
			out.write(msg.getBytes());
			
		}
		
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
	
	}

代码中套用了线程,为了支持多个用户登入服务器,原理就是每当有一个用户登入服务器就开启一个线程。

猜你喜欢

转载自blog.csdn.net/weixin_42294984/article/details/83049629