JAVA基于TCP的点对点聊天程序

服务器端


import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

//点对点聊天程序
public class Myserver implements Runnable{

ServerSocket server =null;
Socket clientSocket; //负责当前线程中c/s通信中的Socket对象
boolean flag = true; //标记是否结束
Thread connenThread; //向客户端发送信息的线程
BufferedReader sin; //输入流对象
DataOutputStream sout; //输出流对象

public static void main(String[] args) {

Myserver myserver=new Myserver();
myserver.serverStart();
}

public void serverStart()
{
try {
server=new ServerSocket(8080); //建立监听服务
System.out.println("端口号:"+server.getLocalPort());

while (flag){
clientSocket=server.accept();
System.out.println("连接已经建立完毕!");
InputStream is=clientSocket.getInputStream();
sin=new BufferedReader(new InputStreamReader(is));
OutputStream os=clientSocket.getOutputStream();
sout=new DataOutputStream(os);
connenThread =new Thread(this);
connenThread.start(); //启动线程向客户端发送信息

String aLine;
while ((aLine=sin.readLine())!=null)
{
System.out.println(aLine);
if(aLine.equals("bye")){
flag=false;
connenThread.interrupt();
break;
}
}

sout.close();
os.close();
sin.close();
is.close();
clientSocket.close();
System.exit(0);

}


} catch (IOException e) {
e.printStackTrace();
}
}

public void run(){
while(true){
try {
int ch;
while((ch=System.in.read())!=-1)
{
sout.write((byte) ch); //从键盘接受字符并向客户端发送
if(ch=='\n')
sout.flush(); //将缓冲区内容向客户端输出

}
} catch (IOException e) {
e.printStackTrace();
}
}
}

public void finalize(){
try {
server.close(); //停止ServerSocket服务
} catch (IOException e) {
e.printStackTrace();
}
} //析构方法

}


客户端

import java.io.*;
import java.net.Socket;

public class MyClient implements Runnable{


Socket clientSocket;
boolean flag=true;
Thread connenThread; //向服务器发送消息
BufferedReader cin;
DataOutputStream cout;

public static void main(String[] args) {
new MyClient().clientStart();

}

public void clientStart(){
try {
clientSocket=new Socket("localhost",8080); //这是本机连接
System.out.println("已建立连接");
while (flag){
InputStream is=clientSocket.getInputStream();
cin=new BufferedReader(new InputStreamReader(is));
OutputStream os=clientSocket.getOutputStream();
cout=new DataOutputStream(os);
connenThread=new Thread(this);
connenThread.start(); //启动线程,向服务器发送信息
String aLine;
while ((aLine=cin.readLine())!=null){ //接收服务器端的数据
System.out.println(aLine);
if (aLine.equals("bye")){
flag=false;
connenThread.interrupt();
break;
}
}

cout.close();
os.close();
cin.close();
is.close();
clientSocket.close(); //关闭Socket连接
System.exit(0);
}
} catch (IOException e) {
e.printStackTrace();
}
}

public void run(){
while (true){
int ch;
try {
while((ch=System.in.read())!=-1){ //从键盘接收字符并向服务器发送
cout.write((byte)ch);
if(ch=='\n'){
cout.flush(); //将缓冲区内容向输出流发送
}
}


} catch (IOException e) {
e.printStackTrace();
}



}
}
}






转载于:https://www.cnblogs.com/0chenxian0/p/8606913.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值