ورود

View Full Version : سوال: Winsock



sr2m72
سه شنبه 24 آبان 1390, 12:26 عصر
سلام دوستان
چطور ميشه با Winsock‌ فايل ارسال كرد؟
ممنون ميشم اگه كمكم كنين.

_behnam_
سه شنبه 24 آبان 1390, 12:56 عصر
باید فایل رو به صورت باینری توd ویژوال وارد کنید و توی یک متغیر بریزید و بعد Winsock.SendData(File)

sr2m72
سه شنبه 24 آبان 1390, 19:39 عصر
باید فایل رو به صورت باینری توd ویژوال وارد کنید و توی یک متغیر بریزید و بعد Winsock.SendData(File)

دوست عزيز، ميشه بيشتر توضيح بدين.
چطور فايل رو به صورت باينري وارد ويژوال كنم.

محسن واژدی
چهارشنبه 25 آبان 1390, 16:27 عصر
سلام
با اجازه آقا _behnam_ عزیز
همانطور که جناب _behnam_ هم گفتند برای ارسال فایل بایستی ابتدا آنرا بصورت باینری باز کنید، برای بازکردن باینری فایل طبق نمونه کد زیر، با دستور Open فایل را بصورت باینری باز میکنیم سپس با یک حلقه در هربار ارسال مقداری از فایل را گرفته و ارسال می کنیم:

Private Sub Command1_Click()
Dim temp$
Open "C:\test.exe" For Binary As #1

Do While Not EOF(1)
temp$ = Space$(2048)
Get 1, , temp$
Winsock1.SendData temp$
DoEvents
Loop
Close #1
End Sub


موفق باشید

امید خطیبی
پنج شنبه 26 آبان 1390, 08:27 صبح
سلام محسن جان
داداش سوال دیگر در مورد winsock که با این کاپوننت ما می توانیم پرت های کامپیوتر را ببندیم و یا باز کنیم؟
سوال با این پروتکل چه کارهایی در سیستم می توان انجام داد؟
ایا می توان اطلاعات ورودی و خروجی پورت ها را که به صورت باینری هستند را در یک فایل ذخیره کرد و یا ان ها را به یک فایل متنی فرستاد؟

sr2m72
شنبه 28 آبان 1390, 15:30 عصر
Private Sub Command1_Click()
Dim temp$
Open "C:\test.exe" For Binary As #1

Do While Not EOF(1)
temp$ = Space$(2048)
Get 1, , temp$
Winsock1.SendData temp$
DoEvents
Loop
Close #1
End Sub




سلام
از كمكتون ممنونم.
ارسالشو درست كردم ولي توي دريافتش مشكل دارم.
وقتي فايل رو به صورت باينري ارسال ميكنم اونها رو يكجا دريافت نمي كنه بخاطر همين موقع دريافت، فايلش ناقص ساخته ميشه.
درضمن كدها رو به صورت 8 كيلو بايتي دريافت ميكنه.
نمي تونم اين كدهاي 8 كيلو بايتي رو يكي كنم تا فايل درست بشه.
كسي ميتونه كمكم كنه؟

M.T.P
شنبه 28 آبان 1390, 17:57 عصر
سلام
از كمكتون ممنونم.
ارسالشو درست كردم ولي توي دريافتش مشكل دارم.
وقتي فايل رو به صورت باينري ارسال ميكنم اونها رو يكجا دريافت نمي كنه بخاطر همين موقع دريافت، فايلش ناقص ساخته ميشه.
درضمن كدها رو به صورت 8 كيلو بايتي دريافت ميكنه.
نمي تونم اين كدهاي 8 كيلو بايتي رو يكي كنم تا فايل درست بشه.
كسي ميتونه كمكم كنه؟

موقع ارسال باید سر و ته فایل رو نشونه گذاری کنید.



Sub SendScreenShot()
On Error GoTo EndLine
Dim StrData As String
Dim StrScreenShotFile As String
Dim IntFileNumber As Integer

StrScreenShotFile = App.Path & "\ScreenShot.jpg"
IntFileNumber = FreeFile
Open StrScreenShotFile For Binary As IntFileNumber
StrData = Input(LOF(IntFileNumber), #IntFileNumber)
Close IntFileNumber

WskClient.SendData "#SCRSHOT#" & StrData & "#ENDSCRSHOT#"

EndLine:
End Sub

موقع دریافت هم یک متغیر String باید داشته باشید که هر بار مقدار دریافتی رو بعلاوه مقدار قبل کنه ، و با تابع Instr هر بار سر و ته مقدار دریافتی که همون متغیر String هست رو بررسی میکنید و اگر شرط برقرار بود ، رشته های الحاقی به عنوان نشانه گذاری رو حذف می کنید و مقدار باقیمونده رو در فایل ذخیره می کنید.

sr2m72
یک شنبه 29 آبان 1390, 23:20 عصر
موقع ارسال باید سر و ته فایل رو نشونه گذاری کنید.



Sub SendScreenShot()
On Error GoTo EndLine
Dim StrData As String
Dim StrScreenShotFile As String
Dim IntFileNumber As Integer

StrScreenShotFile = App.Path & "\ScreenShot.jpg"
IntFileNumber = FreeFile
Open StrScreenShotFile For Binary As IntFileNumber
StrData = Input(LOF(IntFileNumber), #IntFileNumber)
Close IntFileNumber

WskClient.SendData "#SCRSHOT#" & StrData & "#ENDSCRSHOT#"

EndLine:
End Sub

موقع دریافت هم یک متغیر String باید داشته باشید که هر بار مقدار دریافتی رو بعلاوه مقدار قبل کنه ، و با تابع Instr هر بار سر و ته مقدار دریافتی که همون متغیر String هست رو بررسی میکنید و اگر شرط برقرار بود ، رشته های الحاقی به عنوان نشانه گذاری رو حذف می کنید و مقدار باقیمونده رو در فایل ذخیره می کنید.


جناب M.T.P متوجه نشدم. میشه بیشتر توضیح بدین.

sr2m72
یک شنبه 29 آبان 1390, 23:22 عصر
برای ارسال و دریافت، بجای winsock میشه از توابع API استفاده کرد.
اگه میشه لطفا توضیح بدین.

M.T.P
دوشنبه 30 آبان 1390, 00:41 صبح
اول شما بگین که می تونید جمله Salam khubi? رو از وسط متن زیر با کد درش بیارید یا نه؟


<#START#>Salam khubi?<#FINISH#>

فرض کنید که کل فایل دریافت شده شامل متن بالاست ، می تونی سر و ته متن رو بزنید و جمله رو فیلتر کنید؟

sr2m72
دوشنبه 30 آبان 1390, 15:39 عصر
اول شما بگین که می تونید جمله Salam khubi? رو از وسط متن زیر با کد درش بیارید یا نه؟


<#START#>Salam khubi?<#FINISH#>

فرض کنید که کل فایل دریافت شده شامل متن بالاست ، می تونی سر و ته متن رو بزنید و جمله رو فیلتر کنید؟

نه؟
لطفا بگین.
اگه واسه دریافت توضیح بدین بهتره.

M.T.P
سه شنبه 01 آذر 1390, 00:12 صبح
خب دوست من البته جسارت نباشه ، ناراحت نشید ، وقتی مسایل ابتدایی کار رو نمیدونید چطور رفتید سراغ ارسال فایل در شبکه! :متفکر:
اما نگران نباشید یه search بزنید و تابع InStr رو کاملا یاد بگیرید ، کلید اصلیش همینه. :قلب:

sr2m72
سه شنبه 01 آذر 1390, 12:46 عصر
خب دوست من البته جسارت نباشه ، ناراحت نشید ، وقتی مسایل ابتدایی کار رو نمیدونید چطور رفتید سراغ ارسال فایل در شبکه! :متفکر:
اما نگران نباشید یه search بزنید و تابع InStr رو کاملا یاد بگیرید ، کلید اصلیش همینه. :قلب:

اولا ممنون از این که به سوالات من پاسخ میدین.
دوم اینکه کار تابع InStr رو بلدم(برای جستجو در رشته)، ولی نمی تونم چطور رشته ها رو از هم جدا بکنم.
اگه بشه کد گرفتن فایل رو بزارید خیلی بهتره.
بازم ممنونم.

_behnam_
سه شنبه 01 آذر 1390, 13:55 عصر
نمی تونم چطور رشته ها رو از هم جدا بکنم.
با همکاری توابع Instr و Mid میشه البته با Split فکر کنم ساده تر بشه روی این موضوع کار کرد!

sr2m72
پنج شنبه 03 آذر 1390, 19:10 عصر
سلام دوستان، من هنوز نتونستم دریافتش رو درست کنم
کسی میتونه کد دریافت رو واسم بزاره. خیلی مهمه.
با تشکر

sr2m72
شنبه 05 آذر 1390, 13:05 عصر
اساتید VB لطفا کمک کنین.
فقط یک هفته تا تحویل پروژم مونده.


:گریه:کممممممممممممممممممم ممممک:گریه:

daniyal_1363
دوشنبه 07 آذر 1390, 10:46 صبح
سلام

کد فرستادن که من توی نرم افزار Client نرم افزار کافی نت ام استفاده کردم اینه





On Error Resume Next
If Not EOF(1) Then
DoEvents
pic = Input(32760, 1)
tcp.SendData pic
endfile = False
Else
endfile = True
End If
If endfile = True Then
Close #1
tcp.SendData "picend" '------End file
Timer3.Interval = 0
End If



و کد دریافت فایل در سیستم Server






Private Sub tcp_DataArrival(Index As Integer, ByVal bytesTotal As Long)
On Error Resume Next
Dim sti As String
tcp(0).GetData sti
Select Case Mid(sti, 1, 6)
Case "picend"
Close #1
Pic.Image1.Picture = LoadPicture(App.Path + "\cs.jpg")
Pic.Show
Case Else
Put #1, , sti
End Select
End Sub