import java.net.*
import java.io.*
public class ClientSocketDemo
{
//声明客户端Socket对象socket
Socket socket = null
//声明客户器端数据输入输出流
DataInputStream in
DataOutputStream out
//声明字符串数组对象response,用于存储从服务器接收到的信息
String response[]
//执行过程中,没有参数时的构造方法,本地服务器在本地,取默认端口10745
public ClientSocketDemo()
{
try
{
//创建客户端socket,服务器地址取本地,端口号为10745
socket = new Socket("localhost",10745)
//创建客户端数据输入输出流,用于对服务器端发送或接收数据
in = new DataInputStream(socket.getInputStream())
out = new DataOutputStream(socket.getOutputStream())
//获取客户端地址及端口号
String ip = String.valueOf(socket.getLocalAddress())
String port = String.valueOf(socket.getLocalPort())
//向服务器发送数据
out.writeUTF("Hello Server.This connection is from client.")
out.writeUTF(ip)
out.writeUTF(port)
//从服务器接收数据
response = new String[3]
for (int i = 0i <response.lengthi++)
{
response[i] = in.readUTF()
System.out.println(response[i])
}
}
catch(UnknownHostException e){e.printStackTrace()}
catch(IOException e){e.printStackTrace()}
}
//执行过程中,有一个参数时的构造方法,参数指定服务器地址,取默认端口10745
public ClientSocketDemo(String hostname)
{
try
{
//创建客户端socket,hostname参数指定服务器地址,端口号为10745
socket = new Socket(hostname,10745)
in = new DataInputStream(socket.getInputStream())
out = new DataOutputStream(socket.getOutputStream())
String ip = String.valueOf(socket.getLocalAddress())
String port = String.valueOf(socket.getLocalPort())
out.writeUTF("Hello Server.This connection is from client.")
out.writeUTF(ip)
out.writeUTF(port)
response = new String[3]
for (int i = 0i <response.lengthi++)
{
response[i] = in.readUTF()
System.out.println(response[i])
}
}
catch(UnknownHostException e){e.printStackTrace()}
catch(IOException e){e.printStackTrace()}
}
//执行过程中,有两个个参数时的构造方法,第一个参数hostname指定服务器地址
//第一个参数serverPort指定服务器端口号
public ClientSocketDemo(String hostname,String serverPort)
{
try
{
socket = new Socket(hostname,Integer.parseInt(serverPort))
in = new DataInputStream(socket.getInputStream())
out = new DataOutputStream(socket.getOutputStream())
String ip = String.valueOf(socket.getLocalAddress())
String port = String.valueOf(socket.getLocalPort())
out.writeUTF("Hello Server.This connection is from client.")
out.writeUTF(ip)
out.writeUTF(port)
response = new String[3]
for (int i = 0i <response.lengthi++)
{
response[i] = in.readUTF()
System.out.println(response[i])
}
}
catch(UnknownHostException e){e.printStackTrace()}
catch(IOException e){e.printStackTrace()}
}
public static void main(String[] args)
{
String comd[] = args
if(comd.length == 0)
{
System.out.println("Use localhost(127.0.0.1) and default port")
ClientSocketDemo demo = new ClientSocketDemo()
}
else if(comd.length == 1)
{
System.out.println("Use default port")
ClientSocketDemo demo = new ClientSocketDemo(args[0])
}
else if(comd.length == 2)
{
System.out.println("Hostname and port are named by user")
ClientSocketDemo demo = new ClientSocketDemo(args[0],args[1])
}
else System.out.println("ERROR")
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
【ServerSocketDemo.java 服务器端Java源代码】
import java.net.*
import java.io.*
public class ServerSocketDemo
{
//声明ServerSocket类对象
ServerSocket serverSocket
//声明并初始化服务器端监听端口号常量
public static final int PORT = 10745
//声明服务器端数据输入输出流
DataInputStream in
DataOutputStream out
//声明InetAddress类对象ip,用于获取服务器地址及端口号等信息
InetAddress ip = null
//声明字符串数组对象request,用于存储从客户端发送来的信息
String request[]
public ServerSocketDemo()
{
request = new String[3]//初始化字符串数组
try
{
//获取本地服务器地址信息
ip = InetAddress.getLocalHost()
//以PORT为服务端口号,创建serverSocket对象以监听该端口上的连接
serverSocket = new ServerSocket(PORT)
//创建Socket类的对象socket,用于保存连接到服务器的客户端socket对象
Socket socket = serverSocket.accept()
System.out.println("This is server:"+String.valueOf(ip)+PORT)
//创建服务器端数据输入输出流,用于对客户端接收或发送数据
in = new DataInputStream(socket.getInputStream())
out = new DataOutputStream(socket.getOutputStream())
//接收客户端发送来的数据信息,并显示
request[0] = in.readUTF()
request[1] = in.readUTF()
request[2] = in.readUTF()
System.out.println("Received messages form client is:")
System.out.println(request[0])
System.out.println(request[1])
System.out.println(request[2])
//向客户端发送数据
out.writeUTF("Hello client!")
out.writeUTF("Your ip is:"+request[1])
out.writeUTF("Your port is:"+request[2])
}
catch(IOException e){e.printStackTrace()}
}
public static void main(String[] args)
{
ServerSocketDemo demo = new ServerSocketDemo()
}
}
CS模式的QQ这是服务器:ChatServer.javaimport java.net.*import java.io.*
public class ChatServer
{
final static int thePort=8189
ServerSocket theServer
ChatHandler[] chatters
int numbers=0
public static void main(String args[])
{
ChatServer app=new ChatServer()
app.run()
}
public ChatServer()
{
try
{
theServer=new ServerSocket(thePort)
chatters=new ChatHandler[10]
}
catch(IOException io){}
}
public void run()
{
try
{
System.out.println("服务器已经建立!")
while(numbers<10)
{
Socket theSocket=theServer.accept()
ChatHandler chatHandler=new ChatHandler(theSocket,this)
chatters[numbers]=chatHandler
numbers++
}
}catch(IOException io){}
}
public synchronized void removeConnectionList(ChatHandler c)
{
int index=0
for(int i=0i<=numbers-1i++)
if(chatters[i]==c)index=i
for(int i=indexi<numbers-1i++)
chatters[i]=chatters[i+1]
chatters[numbers-1]=null
numbers--
}
public synchronized String returnUsernameList()
{
String line=""
for(int i=0i<=numbers-1i++)
line=line+chatters[i].user+":"
return line
}
public void broadcastMessage(String line)
{
System.out.println("发布信息:"+line)
for(int i=0i<=numbers-1i++)
chatters[i].sendMessage(line)
}
}====================================================这是客户端:ChatClient.javaimport java.awt.*
import java.awt.event.*
import javax.swing.*
import java.net.*
import java.io.*
public class ChatClient extends Thread implements ActionListener
{
JTextField messageField,IDField,ipField,portField
JTextArea message,users
JButton connect,disconnect
String user=""
String userList[]=new String[10]
Socket theSocket
BufferedReader in
PrintWriter out
boolean connected=false
Thread thread
public static void main(String args[])
{
JFrame frame=new JFrame("聊天室")
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
ChatClient cc=new ChatClient()
JPanel content=cc.createComponents()
frame.getContentPane().add(content)
frame.setSize(550,310)
frame.setVisible(true)
}
public JPanel createComponents()
{
JPanel pane=new JPanel(new BorderLayout())
message=new JTextArea(10,35)
message.setEditable(false)
JPanel paneMsg=new JPanel()
paneMsg.setBorder(BorderFactory.createTitledBorder("聊天内容"))
paneMsg.add(message)
users=new JTextArea(10,10)
JPanel listPanel=new JPanel()
listPanel.setBorder(BorderFactory.createTitledBorder("在线用户:"))
listPanel.add(users)
messageField=new JTextField(50)
IDField=new JTextField(5)
ipField=new JTextField("LocalHost")
portField=new JTextField("8189")
connect=new JButton("连 接")
disconnect=new JButton("断 开")
disconnect.setEnabled(false)
JPanel buttonPanel=new JPanel()
buttonPanel.add(new Label("服务器IP:"))
buttonPanel.add(ipField)
buttonPanel.add(new Label("端口:"))buttonPanel.add(portField)
buttonPanel.add(new Label("用户名:"))
buttonPanel.add(IDField)
buttonPanel.add(connect)
buttonPanel.add(disconnect)
pane.add(messageField,"South")
pane.add(buttonPanel,"North")
pane.add(paneMsg,"Center")
pane.add(listPanel,"West")
connect.addActionListener(this)
disconnect.addActionListener(this)
messageField.addActionListener(this)
IDField.addActionListener(this)
ipField.addActionListener(this)
return pane
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==connect){
user=IDField.getText()
String ip=ipField.getText()
int port =Integer.parseInt(portField.getText())
if(!user.equals("")&&connectToServer(ip,port,user))
{
disconnect.setEnabled(true)
connect.setEnabled(false)
}
}
if(e.getSource()==disconnect)disconnectFromServer()
if(e.getSource()==messageField)
if(theSocket!=null)
{
out.println("MESSAGE:"+messageField.getText())
messageField.setText("")
}
}
public void disconnectFromServer()
{
if(theSocket!=null)
{
try
{
connected=false
out.println("LEAVE:"+user)
disconnect.setEnabled(false)
connect.setEnabled(true)
thread=null
theSocket.close()
}catch(IOException io){}
theSocket=null
message.setText("")
users.setText("")
}
}
public boolean connectToServer(String ip,int port,String ID)
{
if(theSocket!=null)
return false
try
{
theSocket=new Socket(ip,port)
in=new BufferedReader(new InputStreamReader(theSocket.getInputStream()))
out=new PrintWriter(new OutputStreamWriter(theSocket.getOutputStream()),true)
out.println("USER:"+user)
message.setText("")
connected=true
thread=new Thread(this)
thread.start()
}catch(Exception e){return false}
return true
}
public void extractMessage(String line)
{
System.out.println(line)
Message messageline
messageline=new Message(line)
if(messageline.isValid())
{
if(messageline.getType().equals("JOIN"))
{
user=messageline.getBody()
message.append(user+"进入了聊天室\n")
}
else if(messageline.getType().equals("LIST"))
updateList(messageline.getBody())
else if(messageline.getType().equals("MESSAGE"))
message.append(messageline.getBody()+"\n")
else if(messageline.getType().equals("REMOVE"))
message.append(messageline.getBody()+"离开了聊天室\n")
}
else
message.append("出现问题:"+line+"\n")
}
public void updateList(String line)
{
users.setText("")
String str=line
for(int i=0i<10i++)
userList[i]=""
int index=str.indexOf(":")
int a=0
while(index!=-1){
userList[a]=str.substring(0,index)
str=str.substring(index+1)
a++
index=str.indexOf(":")
}
for(int i=0i<10i++)
users.append(userList[i]+"\n")
}
public void run(){
try{
String line=""
while(connected &&line!=null){
line=in.readLine()
if(line!=null) extractMessage(line)
}
}catch(IOException e){}
}
} =======================================================import java.net.*
import java.io.*
class ChatHandler extends Thread{
Socket theSocket
BufferedReader in
PrintWriter out
int thePort
ChatServer parent
String user=""
boolean disconnect=false
public ChatHandler(Socket socket,ChatServer parent){
try{
theSocket=socket
this.parent=parent
in=new BufferedReader(new InputStreamReader(theSocket.getInputStream()))
out=new PrintWriter(new OutputStreamWriter(theSocket.getOutputStream()),true)
thePort=theSocket.getPort()
start()
}catch(IOException io){}
}
public void sendMessage(String line){
out.println(line)
}
public void setupUserName(String setname){
user=setname
//System.out.print(user+"参加")
parent.broadcastMessage("JOIN:"+user)
}
public void extractMessage(String line){
Message messageline
messageline = new Message(line)
if(messageline.isValid()){
if(messageline.getType().equals("USER")){
setupUserName(messageline.getBody())
parent.broadcastMessage("LIST:"+parent.returnUsernameList())
}
else if(messageline.getType().equals("MESSAGE")){
parent.broadcastMessage("MESSAGE:"+user+"说: "+messageline.getBody())
}
else if(messageline.getType().equals("LEAVE")){
String c=disconnectClient()
parent.broadcastMessage("REMOVE:"+c)
parent.broadcastMessage("LIST:"+parent.returnUsernameList())
}
}
else
sendMessage("命令不存在!")
}
public String disconnectClient(){
try{
in.close()
out.close()
theSocket.close()
parent.removeConnectionList(this)
disconnect=true
}catch(Exception ex){}
return user
}
public void run(){
String line,name
boolean valid=false
try{
while((line=in.readLine())!=null){
System.out.println("收到:"+line)
extractMessage(line)
}
}catch(IOException io){}
}
}
=========================================================
Message.javapublic class Message{
private String type
private String body
private boolean valid
public Message(String messageLine){
valid=false
type=body=null
int pos=messageLine.indexOf(":")
if(pos>=0){
type=messageLine.substring(0,pos).toUpperCase()
body=messageLine.substring(pos+1)
valid=true
}
}
public Message(String type,String body){
valid=true
this.type=type
this.body=body
}
public String getType(){
return type
}
public String getBody(){
return body
}
public boolean isValid(){
return valid
}
} ==================================================共有4个文件,先运行服务段端。。。 这是我以前学的时候写过的!希望能帮的上你