import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.util.Scanner; /** *发送消息的线程 */ class send extends Thread{ //与客户端对应的socket对象 private Socket socket; public send(Socket socket){ //构造器,用于传递socket this.socket=socket; } @Override public void run() { this.sendMsg(); } //定义发送消息的方法 private void sendMsg(){ //对于消息的发送需要创建两个对象,1.消息的来源:需要创建键盘输入对象 2.需要创建输出流对象 try(Scanner scanner = new Scanner(System.in); PrintWriter pw =new PrintWriter(socket.getOutputStream());){ while(true){ String msg = scanner.nextLine(); pw.println(msg); pw.flush(); } }catch (Exception e){ e.printStackTrace(); } } } /** *接收消息的线程 */ class receive extends Thread{ //创建与客户端对应的socket对象 private Socket socket; public receive(Socket socket){//构造器,用于传递socket this.socket=socket; } @Override public void run() { this.receiveMsg(); } //定义接受消息的方法 private void receiveMsg(){ //创建输入对象流,字节转字符,字符处理流 try(BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()))){ while (true){ String str =br.readLine(); System.out.println("客户端说:"+str); } }catch (Exception e){ e.printStackTrace(); } } } public class ChatSocketSever { public static void main(String[] args) { try(ServerSocket serverSocket = new ServerSocket(8888)){ System.out.println("服务端启动中,等待链接....."); //创建与客户端链接时的socket对象 Socket socket = new Socket(); System.out.println("连接成功!"); //将与客服端对应的socket对象传递给发送消息的线程,并启动该线程 new send(socket).start(); //将与客户端对应的socket对象传递给接受消息的线程,并启动该线程 new receive(socket).start(); }catch (Exception e){ e.printStackTrace(); } } }
老师我这上面为啥一写注释就老是报错呢,比如#内容,下面是代码,一执行就报#注释那行
当我打开第二个goodTCP出现报错现象
这里两个方法名称是一样的,这里怎么识别呢?
老师这个什么意思
请问一下老师,为什么我创建的就没有那两个文件,也就没有报错。
是电脑的问题还是,代码感觉写的对但是不运行
老师,接上一个问题,就这种的 为啥需要变成字符串 比如那个name 没有直接输出,而是转成字符串
请问为什么使用void方法? void study(){ System.out.println("我在认真学习!!"+comp.brand); }
我英语很差,这节课完全没听懂,不知道老师说的的英语名称是前面代码中的什么东西,咋整?
这个不是说一个a和一个b如果使用这个代码输出里面会有多个a和多个b
如何可以保证里面只有一个a和一个b
视频中老师的虚拟机IP有192.168.70.142/143/144...
而我的只有一个192.168.18.128, 其他IP怎么创建?
老师我的问题就是main方法下的System.out.println(Thread.isAlive+“ 4")为什么是判段子线程的而不是主线程的是因为主线程休眠了是吗
from socket import * import time host = 'localhost' port = 8080 addr =(host,port) bufferSize = 10 fullData = b'' tcpServerSocket = socket(AF_INET,SOCK_STREAM) tcpServerSocket.bind(addr) print('********服务器正在监听********') tcpServerSocket.listen(5) tcpClientSocket,addr = tcpServerSocket.accept() while True: data = tcpClientSocket.recv(bufferSize) fullData += data if len(data) < bufferSize : break print(time.ctime()+'\n'+fullData.decode(encoding='utf-8')) print('********给客户端发送确认消息********') tcpClientSocket.send(time.ctime().encode(encoding='utf-8')+b'\n'+'已收到客户端请求'.encode('utf-8')) tcpClientSocket.close() tcpServerSocket.close()
老师好! 我设置的bufferSize =10 我从客户端输入10个字节的字符 比如helloworld 服务器端都不会有响应,其他情况都可以。我知道是因为data长度为10的时候,进程正好读完,进程并没有读下一次使break执行,但是改怎么改呢?请老师指教
两个问题老师:
前面那个圈起来的是服务器错误,后面那个是资源错误?
为什么是args【0】.errno?不是args.errno
非常抱歉给您带来不好的体验!为了更深入的了解您的学习情况以及遇到的问题,您可以直接拨打投诉热线:
我们将在第一时间处理好您的问题!
关于
课程分类
百战程序员微信公众号
百战程序员微信小程序
©2014-2025百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园网站维护:百战汇智(北京)科技有限公司 京公网安备 11011402011233号 京ICP备18060230号-3 营业执照 经营许可证:京B2-20212637