2012-10-18 46 views
13

Tôi có một gói biến đổi loại DatagramPacket. Trong khi packet.getAddress().toString() kết quả trong một chuỗi đại diện cho một địa chỉ IP, nó có thêm một / nối vào đầu String:InetAddress.toString() trả về dấu gạch chéo về phía trước

/127.0.0.1 

tôi có thể dễ dàng loại bỏ các hàng đầu '/', nhưng là có một cách tốt hơn để chỉ có được một chuỗi đại diện của IP? Tôi lo lắng vì nếu có nhiều hơn '/' trong các tình huống khác.

Cảm ơn!

Trả lời

18

Sử dụng như sau:

packet.getAddress().getHostAddress() 

Từ documentation:

Trả về chuỗi địa chỉ IP trong trình bày văn bản.

Contrast rằng với InetAddress.toString():

Chuyển đổi địa chỉ IP này cho một người String. Chuỗi được trả về có dạng: tên máy chủ/địa chỉ IP theo nghĩa đen. Nếu tên máy chủ chưa được giải quyết, không có tra cứu dịch vụ tên đảo ngược được thực hiện. Phần tên máy chủ sẽ được biểu thị bằng một chuỗi rỗng.

5

Nếu bạn chỉ muốn IP, sử dụng địa chỉ host:

String address = InetAddress.getByName("stackoverflow.com").getHostAddress(); 

Nếu bạn chỉ muốn tên máy chủ, sử dụng

String hostname = InetAddress.getByName("stackoverflow.com").getHostName(); 

Các slash bạn nhìn thấy có lẽ là khi bạn làm một hàm forString() ẩn trong đối tượng InetAddress được trả về khi bạn cố gắng in nó ra, in ra tên máy chủ và địa chỉ được phân tách bằng dấu gạch chéo (ví dụ: stackoverflow.com/64.34.119.12). Bạn có thể sử dụng

String address = InetAddress.getByName("stackoverflow.com").toString().split("/")[1]; 
String hostname = InetAddress.getByName("stackoverflow.com").toString().split("/")[0]; 

Nhưng không có lý do gì để chuyển đến trung gian Chuỗi tại đây. InetAddress giữ hai trường riêng biệt về bản chất.

+0

được sao chép từ đây: http://stackoverflow.com/questions/7361802/slash-before-inetaddress-getbynamehost –

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