您的位置:首页 > 理论基础 > 计算机网络

TCP/UDP聊天程序原理[00原创]

2007-05-15 23:41 295 查看
/*
* 文件名:TCPClient.java
* 环境: GNU/Linux Ubuntu 6.10 + Eclipse 3.2
* 功能:基于TCP协议的聊天程序Demo的客户端
* 作者:88250
* 日期:2007.4.10
* E-mail & MDN: DL88250@gmail.com
* QQ:845765
*/

import java.io.*;
import java.net.*;

class TCPClient {
public static void main(String argv[]) throws Exception {
String sentence;
String modifiedSentence;
BufferedReader inFromUser = new BufferedReader(new InputStreamReader(
System.in));
Socket clientSocket = new Socket("192.168.0.131", 4555);
DataOutputStream outToServer = new DataOutputStream(clientSocket
.getOutputStream());
BufferedReader inFromServer = new BufferedReader(new InputStreamReader(
clientSocket.getInputStream()));
sentence = inFromUser.readLine();
outToServer.writeBytes(sentence + ' ');
modifiedSentence = inFromServer.readLine();
System.out.println("FROM SERVER: " + modifiedSentence);
clientSocket.close();
}
}



/*
* 文件名:TCPServer.java
* 环境: GNU/Linux Ubuntu 6.10 + Eclipse 3.2
* 功能:基于TCP协议的聊天程序Demo的服务端
* 作者:88250
* 日期:2007.4.10
* E-mail & MDN: DL88250@gmail.com
* QQ:845765
*/

import java.io.*;
import java.net.*;

class TCPServer {
public static void main(String argv[]) throws Exception {
String clientSentence;
String capitalizedSentence;
ServerSocket welcomeSocket = new ServerSocket(4556);
while (true) {
Socket connectionSocket = welcomeSocket.accept();
BufferedReader inFromClient = new BufferedReader(
new InputStreamReader(connectionSocket.getInputStream()));
DataOutputStream outToClient = new DataOutputStream(
connectionSocket.getOutputStream());
clientSentence = inFromClient.readLine();
capitalizedSentence = clientSentence.toUpperCase() + ' ';
outToClient.writeBytes(capitalizedSentence);
}
}
}

/*
* 文件名:ChatClient.java
* 环境: GNU/Linux Ubuntu 6.10 + Eclipse 3.2
* 功能:基于UDP协议的聊天程序Demo的客户端
* 作者:88250
* 日期:2007.4.10
* E-mail & MDN: DL88250@gmail.com
* QQ:845765
*/

import java.net.*;
import java.io.*;

public class ChatClient
{
private DatagramSocket s;

private InetAddress hostAddress;

private byte[] buf = new byte[1000];

private DatagramPacket dp = new DatagramPacket(buf, buf.length);

// method explanation: if the input char is lowercase, transform it into uppercase,
// otherwise, transform it into lowercase
public static String transform(String src)
{
char[] array = src.toCharArray();
int temp = 0;
for (int i = 0; i < array.length; i++)
{
temp = (int) array[i];
if (temp <= 90 && temp >= 65)
{ // array[i] is uppercase char
array[i] = (char) (temp + 32);
}
else if (temp <= 122 && temp >= 97)
{ // array[i] is lowercase char
array[i] = (char) (temp - 32);
}
}
return String.valueOf(array);
}

// method explanation: Server constructor, implement read the Client
// information.
public ChatClient()
{
try
{
// use the constructor to create any Socket by any able prot.
s = new DatagramSocket();
// get self IP address.
hostAddress = InetAddress.getByName("192.168.0.132");
while (true)
{
String outMessage = "";
// read input.
BufferedReader stdin = new BufferedReader(
new InputStreamReader(System.in));
try
{
outMessage = stdin.readLine();
}
catch (IOException ie)
{
System.err.println("IO error!");
}
// if input "bye" then, exit program.
if (outMessage.equals("bye"))
{
break;
}

outMessage = transform(outMessage); // transform upper/lowercase

String outString = "Client say:" + outMessage;
byte[] buf = outString.getBytes();
// pack data, send data.
DatagramPacket out = new DatagramPacket(buf, buf.length,
hostAddress, ChatServer.PORT);
s.send(out);
// wait for the return for Server.
s.receive(dp);
String rcvd = new String(dp.getData(), 0, dp.getLength())
+ ", form address: /" + dp.getAddress() + ": "
+ dp.getPort();
System.out.println(rcvd);
}
}
catch (UnknownHostException e)
{
System.out.println("Can't open socket!");
System.exit(1);
}
catch (SocketException e)
{
System.out.println("Can't open socket!");
e.printStackTrace();
System.exit(1);
}
catch (IOException e)
{
System.err.println("Communication error!");
e.printStackTrace();
System.exit(1);
}
catch (Exception e)
{
System.err.println("Commnuication error!");
e.printStackTrace();
System.exit(1);
}
System.out.println("ChatClient over!");
}

public static void main(String[] args)
{
new ChatClient();
}
}

/*
* 文件名:ChatServer.java
* 环境: GNU/Linux Ubuntu 6.10 + Eclipse 3.2
* 功能:基于UDP协议的聊天程序Demo的服务端
* 作者:88250
* 日期:2007.4.10
* E-mail & MDN: DL88250@gmail.com
* QQ:845765
*/

import java.net.*;
import java.io.*;
import java.util.*;

public class ChatServer
{
static final int PORT = 7007; // set the Server port.

private byte[] buf = new byte[1000];

private DatagramPacket dgp = new DatagramPacket(buf, buf.length);

private DatagramSocket sk;

// method explanation: if the input char is lowercase, transform it into uppercase,
// otherwise, transform it into lowercase
public static String transform(String src)
{
char[] array = src.toCharArray();
int temp = 0;
for (int i = 0; i < array.length; i++)
{
temp = (int) array[i];
if (temp <= 90 && temp >= 65)
{ // array[i] is uppercase char
array[i] = (char) (temp + 32);
}
else if (temp <= 122 && temp >= 97)
{ // array[i] is lowercase char
array[i] = (char) (temp - 32);
}
}
return String.valueOf(array);
}

// method explanation: Server constructor, implement read the Client
// information.
public ChatServer()
{
try
{
// implement Datagram.
sk = new DatagramSocket(PORT);
System.out.println("Server started");
while (true)
{
// wait for information.
sk.receive(dgp);
// get information.
String rcvd = new String(dgp.getData(), 0, dgp.getLength())
+ ", form address: " + dgp.getAddress() + ", prot: "
+ dgp.getPort();
System.out.println(rcvd);
String outMessage = "";
// read input.
BufferedReader stdin = new BufferedReader(
new InputStreamReader(System.in));
try
{
outMessage = stdin.readLine();
}
catch (IOException ie)
{
System.err.println("IO error!");
}

outMessage = transform(outMessage); // transform upper/lowercase
String outString = "Server say: " + outMessage;

// copy character to buffer.
byte[] buf = outString.getBytes();
// pack data, send information.
DatagramPacket out = new DatagramPacket(buf, buf.length, dgp
.getAddress(), dgp.getPort());
sk.send(out);
}
}
catch (SocketException e)
{
System.err.println("Can't open socket");
System.exit(1);
}
catch (IOException e)
{
System.err.println("Communication error");
e.printStackTrace();
System.exit(1);
}
}

public static void main(String[] args)
{
new ChatServer();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: