package cn.newtol;
/**
* @Author: REN
* @Description:
* @Date: Created in 20:42 2018/5/29
*/
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.SocketException;
import java.net.UnknownHostException;
@SuppressWarnings("serial")
public class ChatClient extends Frame {
private TextArea textArea = new TextArea();
private TextField textField = new TextField();
private DataOutputStream dataOutputStream = null;
private DataInputStream dataInputStream = null;
private Socket socket = null;
private boolean isConnected = false;
private Thread thread=null;
public static void main(String[] args) {
new ChatClient().frameClient();
}
//聊天窗口
public void frameClient(){
setSize(400, 400);
setLocation(400,300);
add(textArea,BorderLayout.NORTH);
add(textField,BorderLayout.SOUTH);
pack();
textField.addActionListener(new TfListener());
//关闭窗口事件监听
this.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
disconnected();
System.exit(0);
}
});
this.connect();
setVisible(true);
}
//链接服务器地址
private void connect(){
try {
socket = new Socket("127.0.0.1", 8888);
thread=new Thread(new ChatThread());
thread.start();
dataInputStream = new DataInputStream(socket.getInputStream());
dataOutputStream = new DataOutputStream(socket.getOutputStream());
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
//断开连接
private void disconnected(){
isConnected = false;
try {
dataOutputStream.close();
dataInputStream.close();
socket.close();
} catch (IOException e1) {
e1.printStackTrace();
}
}
//键盘回车事件
private class TfListener implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
String strMsg = textField.getText();
textField.setText("");
try {
dataOutputStream.writeUTF(strMsg);
dataOutputStream.flush();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
//开启线程接受服务器信息
private class ChatThread implements Runnable{
@Override
public void run() {
try {
dataInputStream = new DataInputStream(socket.getInputStream());
dataOutputStream = new DataOutputStream(socket.getOutputStream());
isConnected = true;
while(isConnected){
String msg= dataInputStream.readUTF();
String taText = textArea.getText();
textArea.setText(taText+msg+"\n");
}
}catch (SocketException e) {
System.out.println("客户端退出");;
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
rhw_socket.zip (21个子文件)
rhw_socket
pom.xml 2KB
target
test-classes
cn
newtol
AppTest.class 465B
generated-test-sources
test-annotations
classes
cn
newtol
ChatClient$ChatThread.class 2KB
App.class 533B
ChatClient$TfListener.class 1KB
ChatServer.class 2KB
ChatServer$ChatThread.class 3KB
ChatClient.class 4KB
ChatClient$1.class 730B
generated-sources
annotations
src
test
java
cn
newtol
AppTest.java 301B
main
java
cn
newtol
App.java 185B
ChatClient.java 4KB
ChatServer.java 3KB
.idea
misc.xml 439B
modules.xml 260B
encodings.xml 172B
compiler.xml 632B
workspace.xml 23KB
libraries
Maven__junit_junit_4_11.xml 455B
Maven__org_hamcrest_hamcrest_core_1_3.xml 532B
inspectionProfiles
rhw_socket.iml 943B
共 21 条
- 1
资源评论
- 不美的阿美2023-07-25这份文件介绍了如何使用Java实现基于TCP协议的Socket通信,内容简明扼要但又不乏实例演示,非常适合初学者入门。
- 郑瑜伊2023-07-25尽管有时候该文件解释得过于简洁,但总体而言,对于想要学习Socket通信的开发者来说,这是一份很不错的参考资料。
- 艾斯·歪2023-07-25对于需要学习TCP协议和Socket通信的开发者来说,这份文件提供了清晰的指导,并给出了一些实用的示例代码。
- 无声远望2023-07-25这篇文件提供了Java实现Socket通信的基础知识,适合那些希望深入了解网络编程的开发者。
- 笨爪2023-07-25文件中的示例代码结构清晰,注释详细准确,非常适合开发者阅读和理解,并且可以直接运行测试。
Newtol
- 粉丝: 504
- 资源: 10
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功