2012-11-21 39 views
8

Tôi đang học lập trình socket với Java. tôi kết nối đến một trang web sử dụng tuyên bố này:Ổ cắm Java - Cổng cục bộ

s = new Socket("www.nba.com", 80); 

Khi tôi gỡ lỗi các ứng dụng và xem xét các nội dung của s, tôi thấy:

Socket[addr=www.nba.com/2.21.246.97,port=80,localport=7846] 

1) Tôi muốn biết nơi localport này 7846 đến từ và chính xác nó là gì.

2) nếu địa chỉ IP của trang web là 2.21.246.97, tại sao tôi không thể kết nối với trang web bằng cách nhập 2.21.246.97 vào trường địa chỉ của trình duyệt của tôi?


Cảm ơn

+1

Tôi tin rằng đó là cổng của máy của bạn kết nối với máy chủ. –

Trả lời

6

Đó là một số cổng ổ cắm địa phương. Nó thường được gán bởi hệ thống.

Xem What is a Socket?.

Trên client-side: Các khách hàng biết tên máy của máy trên mà máy chủ đang chạy và số cổng mà máy chủ là nghe. Để thực hiện yêu cầu kết nối, máy khách sẽ cố gắng điểm hẹn với máy chủ trên máy và cổng của máy chủ. Máy khách cũng cần phải xác định chính nó với máy chủ để nó liên kết với một số cổng địa phương mà nó sẽ sử dụng trong kết nối này. Đây là thường được hệ thống chỉ định.

Đối với câu hỏi thứ hai:

tôi giả sử địa chỉ IP này là những gì bạn nhận bởi máy chủ DNS của bạn khi bạn tra cứu www.nba.com (tôi là khác nhau). Vấn đề có thể là máy chủ HTTP tại địa chỉ này phục vụ nhiều máy chủ ảo và/hoặc máy chủ quan tâm đến tiêu đề Host mà trình duyệt của bạn gửi. Trong trường hợp của bạn, đó là địa chỉ IP thay vì www.nba.com.

+0

Tôi có thể tự gán cổng địa phương của mình không? –

+1

@HasanTahsin Có. Bạn nên sử dụng [hàm tạo này] (http://docs.oracle.com/javase/6/docs/api/java/net/Socket.html#Socket (java.net.InetAddress,% 20int,% 20java.net. InetAddress,% 20int)). – ShyJ

+1

@HasanTahsin Hãy xem: ['Socket (String host, int port, InetAddress localAddr, int localPort)'] (http://docs.oracle.com/javase/6/docs/api/java/net/Socket .html # Socket (java.lang.String,% 20int,% 20java.net.InetAddress,% 20int)) –

Các vấn đề liên quan