導航:首頁 > 配伺服器 > tcp客戶機伺服器程序怎麼做

tcp客戶機伺服器程序怎麼做

發布時間:2023-01-20 17:01:26

① TCP伺服器和客戶機編程

伺服器(TCP/IP)編程實例
現在大多數語言都支持客戶-伺服器模式(C/S)編程,其中VB給我們提供了很好的客戶-伺服器編程方式。下面我們用VB來實現TCP/IP網路編程。
TCP/IP協議是Internet最重要的協議。VB提供了WinSock控制項,用於在TCP/IP的基礎上進行網路通信。當兩個應用程序使用Socket進行網路通信時,其中一個必須創建Socket伺服器偵聽,而另一個必須創建Socket客戶去連接伺服器。這樣兩個程序就可以進行通信了。
①創建伺服器
首先創建一個服務埠號。並開始偵聽是否有客戶請求連接。
建立一窗體,並向其增加一個Winsock控制項(可在工程菜單中的部件項來添加此控制項)
添加兩文本框Text1,Text2,和一按鈕Command1
Private Sub Form_Load()
SockServer.LocalPort = 2000 ′伺服器埠號,最好大於1000
SockServer.Listen ′開始偵聽
End Sub
Private Sub Form_Unload(Cancel As Integer)
SockServer.Close
End Sub
Private Sub SockServer_Close()
SockServer.Close
End Sub
Private Sub SockServer_ConnectionRequest(ByVal requestID As Long)
SockServer.Close
SockServer.Accept requestID ′表示客戶請求連接的ID號
End Sub
′當客戶向伺服器發送數據到達後,產生DataArrival事件,在事件中接收數據,GetData方法接收數據。
Private Sub SockServer_Data
Arrival(ByVal bytesTotal As Long)
Dim s As String
SockServer.GetData s
Text1.Text = s
End Sub
當需要向客戶發送數據時,只需調用SendData方法。
Private Sub Command1_Click()
SockServer .SendData Text2.Text
End Sub
②創建客戶
要創建客戶連接伺服器,首先設置伺服器主機名,如IP地址、域名或計算機名,然後設置伺服器埠,最後連接伺服器。
建立一窗體,並向其增加一個Winsock控制項(可在工程菜單中的部件項來添加此控制項),取名為:SockC1。添加兩文本框Text1,Text2,和一按鈕Command1
Private Sub Form_Load()
SockCl.RemoteHost =′127.0.0.1″
′表示伺服器主機名
SockCl.RemotePort = 2000
′表示伺服器埠名
SockCl.Connect
′連接到伺服器
End Sub
Private Sub Form_Unload(Cancel As Integer)
SockCl.Close
End Sub
Private Sub SockCl_Close()
SockCl.Close
End Sub
Private Sub SockCl_DataArrival(ByVal bytesTotal As Long)
Dim s As String
SockCl.GetData s ′接收數據到文本框中
Text1.Text = s
End Sub
Private Sub Command1_Click()
SockCl.SendData Text2.Text ′向伺服器發送數據
End Sub
③進行通信
把這兩個窗體分別編譯成兩個EXE文件,伺服器Server.exe和客戶Client.exe程序,並把它們分別安裝在伺服器端和客戶端,這樣就可以實現兩者通信了。
-

② 在java中實現TCP協議編程中怎麼傳

在Java中實現TCP協議編程

ServerSocket:編寫TCP網路服務程序,首先要用到java.net.ServerSocket類用以創建伺服器Socket

構造方法:

ServerSocket(intport):創建綁定到特定埠的伺服器套接字

ServerSocket(intport,intbacklog):利用指定的backlog(伺服器忙時保持連接請求的等待客戶數量),創建伺服器套接字並將其綁定到指定的本地埠號。

ServerSocket(intport,intbacklog,InetAddressbindAddr):使用指定的埠、偵聽backlog和要綁定到的本地IP地址創建伺服器。

Socket:客戶端要與伺服器建立連接,必須先創建一個Socket對象

常用構造方法

Socket(Stringhost,intport):創建一個流套接字並將其連接到指定主機上的指定埠號。

Socket(InetAddressaddress,intport):創建一個流套接字並將其連接到指定IP地址的指定埠號。

伺服器端程序調用ServerSocket類中的accept()方法等待客戶端的連接請求,一旦accept()接收了客戶端連接請求,該方法返回一個與該客戶端建立了專線連接的Socket對象,不用程序去創建這個Socket對象。建立了連接的兩個Socket是以IO流的方式進行數據交換的,Java提供了Socket類中的getInputStream()返回Socket的輸入流對象,getOutputStream()返回Socket的輸出流對象。

TCP伺服器與TCP客戶端間的數據的接受圖示:

用TCP實現伺服器與客戶端的「聊天」:

實例代碼:

客戶端:

packagecom.hbsi.net;

importjava.net.Socket;

importjava.io.*;

publicclassTcpClient{

publicstaticvoidmain(String[]args)throwsException{

//1.建立tcp客戶端socket,要確定要連接的伺服器ip,port

Sockets=newSocket("192.168.49.87",9009);

//獲取鍵盤錄入

BufferedReaderbr=newBufferedReader(newInputStreamReader(System.in));

//2.通過建立的socket,獲取輸出流對象

//數據輸出給伺服器端

OutputStreamout=s.getOutputStream();

BufferedWriterbwout=newBufferedWriter(newOutputStreamWriter(out));

//獲取伺服器端返回的數據

//讀取伺服器端發過來的信息InputStreamReader()

BufferedReaderbrin=newBufferedReader(newInputStreamReader(

s.getInputStream()));

Stringline=null;

while((line=br.readLine())!=null){

if(line.equals("over"))

break;

bwout.write(line);

bwout.newLine();

bwout.flush();

Stringstr=brin.readLine();

System.out.println("server:"+str);

}

br.close();

s.close();

}

}

伺服器端:

packagecom.hbsi.net;

importjava.io.BufferedReader;

importjava.io.BufferedWriter;

importjava.io.InputStream;

importjava.io.InputStreamReader;

importjava.io.OutputStreamWriter;

importjava.net.ServerSocket;

importjava.net.Socket;

publicclassTcpServer{

publicstaticvoidmain(String[]args)throwsException{

//1.建立伺服器socket

ServerSocketss=newServerSocket(9009);

//2.調用accept()

Sockets=ss.accept();

System.out.println(s.getInetAddress().getHostAddress()

+"...connection");

//讀取客戶的信息的輸入流

InputStreamin=s.getInputStream();

BufferedReaderbrin=newBufferedReader(newInputStreamReader(in));

//向客戶端發送信息輸出流,服務端向客戶端返回信息OutputStreamWriter()

BufferedWriterbrout=newBufferedWriter(newOutputStreamWriter(

s.getOutputStream())); Stringline=null;

while((line=brin.readLine())!=null){

System.out.println("client:"+line);

brout.write(line.toUpperCase());//伺服器端收到信息後,將信息轉為大寫返回給客戶端toUpperCase()

brout.newLine();

brout.flush();

}

s.close();

ss.close();

}

}

③ 怎樣在自己電腦上建立一個TCP伺服器

首先需要在電腦上搭建伺服器,關於網上好多按步驟安裝apache,sql,phpmyadmin的方法復雜而且沒有必要,這里推薦wamp這樣的一個集成軟體,安裝非常簡單,一路點擊next,apache+sql+phpmyadmin的環境一鍵搭好。
在網路中搜索Wamp下載,直接下載就行。下載完wamp進行安裝,一路點擊next,裝在c:\wamp下,最後install完成.
在瀏覽器輸入localhost,出現以下頁面說明安裝成功了。現在伺服器和php環境算是搭好了。此時在桌面右下角任務欄中會有wamp的圖標,點擊會有下圖顯示,www是網站頁面根目錄,localhost是網站默認主頁,點擊phpmyadmin可以進入資料庫管理界面.
現在網站只能在PC上顯示,如何能把網站放到互聯網上讓朋友也欣賞一下。這時就需要一款叫花生殼的軟體,提供動態的域名映射.
下載網址如下:http://hsk.oray.com/download/#type=windows|lan
下載完軟體按步驟安裝即可,這時候需要注冊一下花生殼會員,注冊時按網頁提示的步驟即可,用身份證注冊可以獲得一個免費域名。用注冊的賬號密碼登陸軟體。會出現以下界面。這里的網址是申請的免費域名。
在域名上右鍵,選擇新花生殼管理,填寫應用名稱,這個可以隨便填,內網主機為本機內網的ip地址,這時需要查看以下,win+R在cmd中輸入,ipconfig/all,
可以看到ipv4地址,填寫即可。埠為80埠。
同時,現在需要設置一下路由器。在瀏覽器輸入192.168.1.1。輸入路由器用戶名和密碼,一般都為admin。進入路由器界面。需要設置三個地方,首先是動態DNS,選擇服務商為花生殼,填寫用戶名密碼,驗證保存。然後是轉發規則中的虛擬伺服器,添加新條目,埠80,ip地址為內網ip。最後是,DMZ主機,設置開啟,ip為內網本機ip。
現在設置基本完成,這時就可以測試了。注意,要把防火牆關閉,否則外網還是訪問不了本機的網站。在控制面板中把防火牆關閉。現在可以寫一段html代碼,命名為index.html(注意此時先把index.php放到別的文件夾)放入wamp\www目錄中,來測試訪問。
最後,在瀏覽器輸入花生殼域名,看看是不是就能訪問了。同時也可以把自域名發送給朋友,讓他們幫測試一下。

④ java寫tcp客戶端測試類該怎麼寫

1.TCP服務端的程序編寫

package test;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;

public class MyTcp{
private BufferedReader reader;
private ServerSocket serverSocket;
private Socket socket;
/**
* 創建服務端的程序,讀取客戶端傳來的數據
*/
void getserver(){
try {
serverSocket = new ServerSocket(8998); //實例化服務端socket
System.out.println("伺服器套接字已經創建成功");
while (true) {
System.out.println("等待客戶機的連接:");
socket = serverSocket.accept(); //實例化socket對象
reader = new BufferedReader(new InputStreamReader(socket.getInputStream())); //實例化BufferReader對象
getClientMessage();
}
} catch (Exception e) {
e.printStackTrace();
}

}

private void getClientMessage() {
try {
while (true) {
System.out.println("客戶機傳來的信息是:"+reader.readLine());
}
} catch (Exception e) {
e.printStackTrace();
}
}

public static void main(String[] args) {
MyTcp myTcp = new MyTcp(); //創建本類對象
myTcp.getserver();
}
}
2.TCP客戶端程序編寫

package test;

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.PrintWriter;
import java.net.Socket;
import java.nio.channels.WritableByteChannel;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.border.BevelBorder;

public class MyTcpClient extends JFrame{
private PrintWriter printWriter;
Socket socket;
private JTextField jTextField = new JTextField();
private JTextArea jTextArea = new JTextArea();
Container container;
/**
* 創建的Tcp客戶端程序
*/

public MyTcpClient (String title) {
super(title);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
container = this.getContentPane();
final JScrollPane jScrollPane = new JScrollPane();
jScrollPane.setBorder(new BevelBorder(BevelBorder.RAISED)); //顯示邊框
getContentPane().add(jScrollPane,BorderLayout.CENTER);
jScrollPane.setViewportView(jTextArea);
container.add(jTextField,"South"); //將文本框放在窗體下面
jTextField.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
printWriter.println(jTextField.getText()); //將文本框的信息寫入流(為下面的輸出流寫入信息做准備)
jTextArea.append(jTextField.getText() + "\n");
jTextArea.setSelectionEnd(jTextArea.getText().length());
jTextField.setText(null);
}
});
}

private void connect() {
jTextArea.append("嘗試連接中...\n");
try {
socket = new Socket("127.0.0.1",8998);
printWriter = new PrintWriter(socket.getOutputStream(),true); //將printwriter中的信息流寫入到套接字的輸出流傳送給服務端
jTextArea.setText("已完成連接\n\n");
} catch (Exception e) {
e.printStackTrace();
}
}

public static void main(String[] args) {
MyTcpClient myTcpClient = new MyTcpClient("向伺服器發送數據");
myTcpClient.setSize(500,200);
myTcpClient.setVisible(true);
myTcpClient.connect();
}
}

3.效果展示
<1>先將服務端的程序跑起來

<2>再將客戶端的程序跑起來

<3>.客戶端和服務端進行交互

⑤ 請問JAVA中創建一個TCP伺服器端程序的驟是什麼呢

1.建立一個伺服器socket並開始監聽.

2.使用accept()方法取得新的連接.

3.建立輸入和輸出流.

4.在已有的協議上產生會話.

5.關閉客戶端流和socket.

6.回到第二步或者到第七步.

7.關閉伺服器socket.

⑥ 如何編寫用TCP/IP的通訊程序

首先要講一下他們的一些設置(屬性):
TServerSocket 的幾個屬性
Active
是否是工作狀態,可以把它設置為ture或false來啟動和停止偵聽。
Port
本機偵聽的埠,可以設置為一大於1024的數;
ServerType
服務端的工作方式,有兩個選擇,一個是stNonBlocking 非阻塞方式,一個是stThreadBlocking線程阻塞方式,默認是非阻塞方式。用非阻塞方式編程比較簡單(我個人認為),用阻塞方式對每個連接必須自己用線程來控制收發。
ThreadCacheSize
緩沖的線程個數 當ServerType是stThreadBlocking時有效。
TClientSocket 的幾個屬性
Active
是否是工作狀態,可以把它設置為ture或false來同服務端建立或斷開連接。
Host
伺服器(ServerSocket)的計算機名,是一個字元串
Address
伺服器(ServerSocket)的IP地址
ClientType
客戶端的工作方式一種是ctNonBlocking非阻塞方式,一種是ctBlocking阻塞方式,默認是非阻塞方式
Port
同服務端(ServerSocket)連接的埠,這個埠就是ServerSocket的偵聽 埠
在設置ClientSocket的(Host)主機名和設置(Address)IP地址是等效的,但設主機名需要網路具有DNS(域名解析服務)伺服器,而且設主機名要比設主機的IP地址連接的速度慢一些。建議用Address來同ServerSocket進行連接。

設置好所有的屬性後,ServerSocket控制項就可以通過將它的Active屬性置為true來進行偵聽了。ClientSocket可以通過設置它的Active屬性來同ServerSocket進行連接。連接成功就可以進行通訊了。在這個過程中會產生一些事件,下面說說他們各自的事件。

TServerSocket的幾個事件
OnAccept
當一個客戶同服務端連接成功後產生這個事件,產生這個事件後這個連接就可用了,可以對這個客戶進行發送和接收數據。
OnClientConnect
當一個客戶正在同服務端建立連接的時候產生此事件,在這里你可以決定是否接受這個連接。
OnClientDisconnect
當一個客戶同服務端的連接斷開的時候產生此事件,你需要在這里進行一些處理,如從連接列表中清除次連接釋放內存等。
OnClientError
當客戶同服務端出現錯誤時產生此事件,在此事件中你可以通過設置ErrorCode = 0來屏蔽系統的錯誤提示。這樣就可以避免討厭的英文錯誤了。根據ErrorEvent的不同的值來得知發生了什麼錯誤,它有一下幾中錯誤類型
eeGeneral 未知錯誤
eeSend 發送數據出現錯誤
eeReceive 接收數據出現錯誤
eeConnect 客戶請求連接時出現錯誤
eeDisconnect 客戶斷開連接時出現錯誤
eeAccept 接受一個客戶時發生錯誤
一般來講,當發生錯誤的時候這個客戶的連接就已經不可用了,要對這個客戶進行連接失敗處理。
OnClientRead
當服務端收到客戶端發來的數據的時候產生此事件。接收客戶端的數據都在這里進行。
OnClientWrite
當服務端發送數據的時候產生此事件。

TClientSocket的幾個事件

OnConnect
同服務端(ServerSocket)連接成功後將產生此事件,產生此事件後才說明這個連接可用了,這時才可以向ServerSocket發送數據。

OnConnecting
正在同服務端進行連接是產生此事件。
OnDisconnect
同服務端的連接斷開後產生此事件,產生此事件後ClientSocket的Active屬性就為false了,這時這個連接就不可用了,必須重新進行連接才能向伺服器發送數據。
OnError
當Socket發生錯誤時產生此事件,這個事件的意義和ServerSocket的Error事件完全一樣,只是它沒有eeAccept錯誤。
OnRead
當接收到服務端發來的數據後產生此事件。
OnWrite
當向服務端發送數據的時候產生此事件。

⑦ C#TCP非同步伺服器和客戶端咋連接

TCP伺服器端的客戶端使用的方法不一樣,伺服器被叫,客戶端主叫。伺服器程序,設定一個埠用於客戶端呼叫連接,聲明一個socket綁定到這個埠,偵聽客戶端呼叫即可。客戶端聲明一個socket,通過客戶端socket對伺服器指定埠發出連接請求(主叫),伺服器相應此連接請求,建立連接,然後就可以互相通訊了。
伺服器和客戶端,就是在主叫與被叫上有區別,建立連接後,數據的收發都是一樣的。

⑧ C++ TCP客戶端代碼怎麼寫

C++ TCP客戶端代碼寫法:

客戶端編程的步驟:

1:載入套接字型檔,創建套接字(WSAStartup()/socket());
2:向伺服器發出連接請求(connect());
3:和伺服器端進行通信(send()/recv());
4:關閉套接字,關閉載入的套接字型檔(closesocket()/WSACleanup())。

代碼:

#include<stdio.h>
#include<Winsock2.h>
#pragmacomment(lib,"WS2_32.lib")

voidmain()
{
WORDwVersionRequested;
WSADATAwsaData;
interr;

wVersionRequested=MAKEWORD(1,1);

err=WSAStartup(wVersionRequested,&wsaData);

if(err!=0)
{
return;
}

if(LOBYTE(wsaData.wVersion)!=1||
HIBYTE(wsaData.wVersion)!=1)
{
WSACleanup();
return;
}

SOCKETsockSrv=socket(AF_INET,SOCK_STREAM,0);

SOCKADDR_INaddrSrv;
addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(6000);
bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
listen(sockSrv,5);

SOCKADDR_INaddrClient;
intlen=sizeof(SOCKADDR);

while(1)
{
SOCKETsockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);
charsendBuf[50];
sprintf(sendBuf,"Welcome%stohere!",inet_ntoa(addrClient.sin_addr));
send(sockConn,sendBuf,strlen(sendBuf)+1,0);
charrecvBuf[50];
recv(sockConn,recvBuf,50,0);
printf("%s ",recvBuf);
closesocket(sockConn);
}

}

⑨ 編寫一個簡單的TCP通信程序。伺服器發送「你好我是伺服器」,客戶端接收該信息並顯示在屏幕上。用Java寫

1、伺服器端

importjava.io.DataOutputStream;
importjava.io.IOException;
importjava.net.ServerSocket;
importjava.net.Socket;

publicclassSocketServer{

privatestaticfinalintPORT=8088;

publicstaticvoidmain(String[]args){
ServerSocketserver=null;
try{
server=newServerSocket(PORT);
while(true){
Socketclient=server.accept();
newThread(newServer(client)).start();
}
}catch(IOExceptione){
e.printStackTrace();
}
}

}

classServerimplementsRunnable{

privateSocketclient;

publicServer(Socketclient){
this.client=client;
}

publicvoidrun(){
DataOutputStreamoutput=null;
try{
output=newDataOutputStream(client.getOutputStream());
output.writeUTF("你好我是伺服器");
}catch(IOExceptione){
e.printStackTrace();
}finally{
try{
if(output!=null)output.close();
output=null;
}catch(IOExceptione){}
}
}

}

2、客戶端

importjava.io.DataInputStream;
importjava.io.IOException;
importjava.net.Socket;
importjava.net.UnknownHostException;

{

privatestaticfinalintPORT=8088;

publicstaticvoidmain(String[]args){
Socketsocket=null;
try{
socket=newSocket("127.0.0.1",PORT);
DataInputStreamin=newDataInputStream(socket.getInputStream());
Stringres=in.readUTF();
System.out.println(res);
if(in!=null)in.close();
}catch(UnknownHostExceptione){
e.printStackTrace();
}catch(IOExceptione){
e.printStackTrace();
}finally{
if(socket!=null){
try{
socket.close();
}catch(IOExceptione){}
}
}
}
}
閱讀全文

與tcp客戶機伺服器程序怎麼做相關的資料

熱點內容
linux的現狀 瀏覽:923
命令與征服叛逆者修改器 瀏覽:246
怎麼用ios玩安卓全民槍戰 瀏覽:668
程序員入行前後的頭發 瀏覽:709
嵌入式圖像演算法 瀏覽:329
伺服器如何訪問伺服器失敗 瀏覽:875
android進度球 瀏覽:1001
Linux造成xfs文件夾 瀏覽:457
華為手機怎麼修改wifi加密類型 瀏覽:250
伺服器封口是什麼意思 瀏覽:743
有限元分析是演算法嗎 瀏覽:901
空氣壓縮機性能曲線 瀏覽:22
京城程序員2019 瀏覽:406
android新系統 瀏覽:512
安卓80有什麼bug 瀏覽:678
如何做單機伺服器 瀏覽:945
校訊通查成績怎麼顯示伺服器異常 瀏覽:884
冰箱壓縮機工作壓力是多少 瀏覽:410
程序員20多平米租房 瀏覽:451
電工知識用線的演算法 瀏覽:340