利用TCP实现简单聊天程序

本文介绍了如何利用TCP协议创建一个简单的聊天程序。首先讲解了客户端如何连接服务器端,涉及ServerSocket和Socket的使用。接着阐述了客户端与服务器端相互通信的实现,包括数据的发送和接收,并强调了线程在接收数据中的重要性。最后提到了多客户聊天的实现,为读者展示了TCP聊天程序的基本架构。
摘要由CSDN通过智能技术生成

TCP通信的特点是面向连接,即通信双方必须先建立连接然后才能进行通信,安全性比较高,保证信息的正确性。

先介绍客户端怎么连接服务器端:

服务器打开某个端口并进行监听,等待客户端连接;客户端根据服务器的IP地址,连接服务器的某个端口。服务器端用ServerSocket(port)打开port端口并监听,客户端用Socket(IP,port)连接服务器端的port端口。在服务器端用accept函数来接受客服端的socket对象。accept函数是一个死等函数,如果没有客户端连接,程序将会在这里阻塞知道有客户端连接。

服务器端:

package Easy; 
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
	private int Port = 9999;
	private ServerSocket SS;
	private Socket socket;
	
	public Server(){
		try{			
			SS = new ServerSocket(Port);
			socket = SS.accept();
			String ipAddress = socket.getInetAddress().getHostAddress();
            System.out.println("客户端" + ipAddress + "连接");
		}catch(Exception ex){	
            ex.printStackTrace();	
		}		
	}
	public static void main(String[] args){
		new Server();
	}
}

客户端:

package Easy;
import java.net.InetAddress;
import java.net.Socket;
public class Client {
	public static void main(String[] args) throws Exception{
		InetAddress ip = InetAddress.getByName("Localhost");
		int Port = 9999;
		Socket socket = new Socket(ip,Port);
	}
}

先打开服务器端,此时服务器端监听9999号端口;然后打开客户端,这时候服务器端将输出客户端的IP地址。

如何实现客户端与服务器端的相互通信?(单)

要知道怎么实现相互通信,首先得知道怎么发送数据和接收数据。

发送字符串数据:

OutputStream os = socket.getOutputStream();

PrintStream ps = new PrintStream(os);

ps.println("content");

接收字符串数据:

InputStream is = socket.getInputStream();

BufferedReader br = new BufferedReader(new InputStreamReader(is));

String str = br.readLine();

readLine函数也是一个死等函数,如果客户端连接上了,但是没有发送信息,就会造成阻塞。所以最好的解决方法是将读取信息的代码写在线程内。

知道了怎么发送、接收数据之后,服务器端先打开端口并监听,假如有客户端连接则开启线程,重写run()方法。相互通信时并不知道对方什么时候发送信息,所以就需要线程来实现自动接收信息的功能,然后需要一个发送信息的函数,在这里我选择button按钮的点击事件来实现,发送消息时直接在输入框回车就可以了。

服务器端:

package Alone;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintS
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值