第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定

請教老師一個問題?服務(wù)器端有accpet()函數(shù)等待客戶端響應(yīng),但客戶端沒有accpet()函數(shù)來監(jiān)聽,服務(wù)器端又沒有進(jìn)行消息推送,客戶端獲得消息是啥時觸發(fā)的

我調(diào)試了一下,客戶端的socket.shutdownOutput()會觸發(fā)serverSocket.accept();可是服務(wù)器線程是如何保證在向客戶端寫入“歡迎你”后客戶端才會進(jìn)行數(shù)據(jù)流的讀入。求解。。。。


正在回答

7 回答

accept()方法是服務(wù)器端方法,是用來監(jiān)聽某個端口是否收到連接請求,這都沒建立連接呢,發(fā)送啥數(shù)據(jù)。

至于說客戶端獲得服務(wù)器的響應(yīng),那是連接建立之后,getInputStream()方法可以獲取輸入流,這個方法是阻塞的,就是調(diào)用之后會一直等待數(shù)據(jù)到來。

客戶端和服務(wù)器的socket你都沒搞清楚吧!

客戶端socket.shutdownOutput()之后,服務(wù)器知道這個客戶端不會再發(fā)送數(shù)據(jù)了,如果服務(wù)器的數(shù)據(jù)也已經(jīng)發(fā)送完畢,連接就會斷開,服務(wù)器重新調(diào)用accept()方法,繼續(xù)監(jiān)聽端口。

1 回復(fù) 有任何疑惑可以回復(fù)我~
#1

qq_曾經(jīng)有個秘密_0 提問者

非常感謝!
2015-01-27 回復(fù) 有任何疑惑可以回復(fù)我~
#2

qq_曾經(jīng)有個秘密_0 提問者

情況好像是getInputStream()方法是阻塞的,調(diào)用之后會一直等待數(shù)據(jù)到來。不過它怎樣實現(xiàn)阻塞的,是getInputStream()重新開了新線程,還是此客戶端線程阻塞了?有沒有實現(xiàn)阻塞的具體語句塊代碼?
2015-01-27 回復(fù) 有任何疑惑可以回復(fù)我~
#3

qq_曾經(jīng)有個秘密_0 提問者

我學(xué)的不是很深,還請大神講的詳細(xì)點,謝謝哈!
2015-01-27 回復(fù) 有任何疑惑可以回復(fù)我~
#4

仗劍闖江湖 回復(fù) qq_曾經(jīng)有個秘密_0 提問者

或許你可以看看這個方法的源碼,會牽涉到底層的網(wǎng)絡(luò)協(xié)議,具體的過程我也不是很清楚,單從功能實現(xiàn)的角度,不用過多關(guān)注實現(xiàn)的細(xì)節(jié),除非你想自己改寫或者增加一些功能模塊,那樣的話你需要對計算機網(wǎng)絡(luò)非常熟悉。
2015-01-27 回復(fù) 有任何疑惑可以回復(fù)我~
查看1條回復(fù)

樓上正解

0 回復(fù) 有任何疑惑可以回復(fù)我~

以前再學(xué)校里面學(xué)過一點點socket,現(xiàn)在聽過老師講的課后又編寫了一遍,不知道實際的開發(fā)中是不是這樣用線程去等待接受別人發(fā)送信息

0 回復(fù) 有任何疑惑可以回復(fù)我~

package test;

import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class ServerSocket {
?public static void main(String[] args) throws UnknownHostException, IOException{
??java.net.ServerSocket server=new java.net.ServerSocket(10);
??List list=new ArrayList();
??while(true){
???Socket socket= server.accept();
???list.add(new Session(socket));
???/*OutputStream output= socket.getOutputStream();
???ObjectOutputStream objout=new ObjectOutputStream(output);
???objout.writeObject(list);*/
??}
?}
}


class Session extends Thread{
?private Socket sck;
?private User u;
?public Session(Socket sck) throws IOException{
??this.sck=sck;
??Scanner sc=new Scanner(System.in);
??try {
???InputStream input= sck.getInputStream();
???ObjectInputStream objInput=new ObjectInputStream(input);
???this.u=(User)objInput.readObject();
???System.out.println("當(dāng)前用戶:"+u.getName());
??} catch (IOException e) {
???// TODO Auto-generated catch block
???e.printStackTrace();
??} catch (ClassNotFoundException e) {
???// TODO Auto-generated catch block
???e.printStackTrace();
??}
??this.start();
??OutputStream output=this.sck.getOutputStream();
??while(true){
???System.out.print("您說:");
???String mesg= sc.nextLine();
???output.write(("\n"+mesg).getBytes());
??}
?}
?
?@Override
?public void run() {
??while(true){
???InputStream input=null;
???int length=0;
???try {
????input = sck.getInputStream();
????length= input.available();
????byte[] b=new byte[length];
????input.read(b);
????String str=new String(b);
????if(str!=null&&!str.isEmpty()){
?????System.out.println("\n"+u.getName()+"說:"+str);
????}
????this.sleep(100);
???} catch (IOException e) {
????try {
?????input.close();
????} catch (IOException e1) {
?????e1.printStackTrace();
????}
????e.printStackTrace();
???} catch (InterruptedException e) {
????e.printStackTrace();
???}
??}
?}
}

這是服務(wù)器端代碼

0 回復(fù) 有任何疑惑可以回復(fù)我~

package test;

import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.io.Serializable;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.List;
import java.util.Scanner;

public class ClinetSocket extends Thread {
?private Socket socket;
?public static void main(String[] args) throws UnknownHostException, IOException, ClassNotFoundException{
??new ClinetSocket().login();
?}
?
?public void login() throws UnknownHostException, IOException, ClassNotFoundException{
??Scanner sc=new Scanner(System.in);
??System.out.print("請輸入您的昵稱:");
??User u= new User(sc.nextLine());
??Socket socket=new Socket("127.0.0.1", 10);
??OutputStream output= socket.getOutputStream();
??ObjectOutputStream objout=new ObjectOutputStream(output);
??objout.writeObject(u);
??this.socket=socket;
??this.start();
??/*while(true){
???InputStream input= socket.getInputStream();
???ObjectInputStream objInput=new ObjectInputStream(input);
???List list= (List)objInput.readObject();
???if(list!==null&&!list.isEmpty()){
????System.out.println("當(dāng)前在線用戶:");
????for(int i=0;i<list.size();i++){
?????
????}
???}
??}*/
??while(true){
???System.out.print("您說:");
???String mesg= sc.nextLine();
???output.write(mesg.getBytes());
??}
?}
?
?public void run(){
??InputStream input=null;
??try {
???input= this.socket.getInputStream();
???while(true){
????byte[] b=new byte[input.available()];
????input.read(b);
????if(b.length>0){
?????System.out.println("\n"+new String(b));
????}
???}
??} catch (IOException e) {
???// TODO Auto-generated catch block
???e.printStackTrace();
??}
?}
}

class User implements Serializable{
?private String name;
?public User(String name){
??this.name=name;
?}
?public String getName() {
??return name;
?}
?public void setName(String name) {
??this.name = name;
?}
}

這是客戶端代碼

0 回復(fù) 有任何疑惑可以回復(fù)我~

我在客戶端使用一個線程去無限循環(huán)執(zhí)行這樣的一段代碼獲取服務(wù)器端發(fā)送的消息

public void run(){
??InputStream input=null;
??try {
???input= this.socket.getInputStream();
???while(true){
????byte[] b=new byte[input.available()];
????input.read(b);
????if(b.length>0){
?????System.out.println("\n"+new String(b));
????}
???}
??} catch (IOException e) {
???// TODO Auto-generated catch block
???e.printStackTrace();
??}
?}

不知道這么做是不是不合適

0 回復(fù) 有任何疑惑可以回復(fù)我~
info?=?br.readLine()

客戶端線程是在這行代碼停下的,不知道具體是為啥,具體是哪個方法實現(xiàn)的阻塞?求。。。



0 回復(fù) 有任何疑惑可以回復(fù)我~
#1

藍(lán)胖子Torres

點進(jìn)去看看源碼不就知道了嗎
2015-01-29 回復(fù) 有任何疑惑可以回復(fù)我~

舉報

0/150
提交
取消

請教老師一個問題?服務(wù)器端有accpet()函數(shù)等待客戶端響應(yīng),但客戶端沒有accpet()函數(shù)來監(jiān)聽,服務(wù)器端又沒有進(jìn)行消息推送,客戶端獲得消息是啥時觸發(fā)的

我要回答 關(guān)注問題
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號