在网上看了很多关于Thread和Socket的资料,项目中也用到不少,但是都是比较简单,或者是用一些现成的,现在想从头开始,慢慢的再学习。希望能和各位前辈进行交流。接触的需求好多一开始比较简单,后来就慢慢复杂了,我想这个学的过程也是,先来个简单的,然后再慢慢的进行完善。好了,不废话了。
场景:客户端将键盘输入的字符通过socket发送到服务端,当输入的字符为“exit”时,程序退出,服务端仅仅将接收到的信息打印出来。
服务端代码:
public class SocketServer extends Thread{
private java.net.ServerSocket ss;
private java.net.Socket s;
@Override
public void run() {
try{
while(true){
this.s=this.ss.accept();
java.io.BufferedReader reader =
new BufferedReader(
new java.io.InputStreamReader(
s.getInputStream()));
String str=reader.readLine();
System.out.println("开始接受数据:");
while(str!=null){
System.out.println("读了一行");
System.out.println(str);
str=reader.readLine();
}
reader.close();
this.s.close();
}
}catch(Exception ex){
ex.printStackTrace();
}
}
public SocketServer(int port){
try{
System.out.println("服务端启动.......");
this.ss=new ServerSocket(port);
}catch(Exception ex){
ex.printStackTrace();
}
}
public static void main(String[] args){
Thread t=new SocketServer(8888);
t.start();
}
}
客户端的代码:
public class SocketClient{
public static void main(String[] args)throws Exception {
java.net.Socket s=new java.net.Socket("127.0.0.1",8888);
java.io.BufferedWriter out=new java.io.BufferedWriter(
new java.io.OutputStreamWriter(
new java.io.BufferedOutputStream(s.getOutputStream())));
java.io.BufferedReader reader=new BufferedReader(
new java.io.InputStreamReader(System.in));
String str=reader.readLine();
while(!"exit".equals(str)){
out.write(str + "\n");
out.flush();
str=reader.readLine();
}
reader.close();
out.close();
}
}
分享到:
相关推荐
JAVA的Thread类和Runnable接口为我们提供了实现并发执行的工具,理解并熟练运用这些工具对于提升服务器性能至关重要。 文件名“xtrachat-master”可能表示这是一个项目的源代码仓库,包含主分支的全部代码。在实际...
4. **断点续传**:当下载中断时,系统会记住已下载的部分,下次启动下载时可以从已有的部分继续,而不是从头开始。这需要在服务器和客户端之间保存和传递文件的当前位置信息。 5. **文件I/O操作**:在Java中,`java...
断点续传技术是FTP传输的重要增强,它允许在传输过程中暂停,然后在稍后的时间点继续传输,而不必从头开始。这对于处理大文件或网络不稳定环境下的文件传输尤其有用。FileTransmit程序利用这一特性,确保了文件传输...
断点续传是另一个核心功能,它允许用户在下载过程中暂停,然后在任意时间点继续下载,而不必从头开始。这在大文件下载时尤其有用。在Java中,实现这一功能通常需要保存已下载部分的文件和相关信息,例如已下载的字节...
在Java编程中,库(Library)是预先编写好的代码集合,程序员可以导入并直接使用,无需从头开始编写所有功能。这些库通常以JAR(Java Archive)文件的形式存在,里面封装了类和方法,可供应用程序调用。Java库广泛...
通过继承,子类可以扩展或修改父类的功能,而无需从头开始编写所有代码。在课件中,你将学习如何声明、实现和使用继承关系,以及理解super关键字和final关键字的应用。 "多线程"是Java的另一大亮点。在现代计算环境...
断点续传允许在文件传输过程中,如果因为网络中断或其他原因导致传输暂停,可以在稍后的时间重新从上次中断的位置继续传输,而无需从头开始。这种方式极大地提高了文件传输的效率和成功率,尤其是在网络条件不稳定的...
Java 类库是Java编程语言的重要组成部分,它们提供了一系列预先编写好的功能,可以帮助开发者高效地实现各种功能,而无需从头开始编码。这个压缩包“JAVA类库大全”显然是一个资源丰富的集合,包含了学习和使用Java...
API提供了大量的类库和接口,帮助开发者实现各种功能而无需从头编写代码。Java API包括标准库和其他扩展库,如Java SE(Standard Edition)、Java EE(Enterprise Edition)和Java ME(Micro Edition)等。 ### ...
"studydemo-master"这个文件名通常表示这是项目的主分支或者包含了所有主要功能的版本,意味着这个压缩包可能包含了完整的源代码、文档或者其他辅助材料,用于帮助学习者从头开始理解Java编程,并逐步掌握各种关键...
多线程是Java的一个强项,面试中可能会讨论到线程的创建方式(Thread类和Runnable接口)、线程同步(synchronized、Lock、volatile)、线程通信(wait/notify、CountDownLatch、CyclicBarrier、Semaphore)以及...
这些库使得开发人员可以快速构建复杂的应用程序而无需从头编写所有代码。 - **标准库概览**: - `java.lang`包包含了运行Java程序所必需的基本类,如`String`、`Object`和`Thread`等。 - `java.awt`包提供了创建...